我需要在Rails中复制一条记录,然后在创建记录之前应将其呈现为新形式。

一切都遵循this有用的答案,但我也需要使用has_many_belongs_to_many关联填充记录

dup()方法让我可以复制记录中的所有内容,但可以复制它的关联,我还看到有一个gem Amoeba可以进行非常通用的深度克隆,但是我想知道是否有一个不使用gem的简单解决方案

最佳答案

Rails没有内置的深度克隆。在Rails 2.3.x中,您有clone用于克隆活动记录属性。在Rails> 3中,他们将该方法重命名为dup,现在缺少其文档。但是,它与clone相同,并且其文档说以下内容。


请注意,这是一个“浅”克隆:它复制对象的属性
仅,而不是其关联。 “深度”克隆的程度是
特定于应用程序的,因此留给应用程序
根据需要实施。


因此,如果您要克隆关联,则您可以自己操作。在我的项目中,为此目的使用了一种称为replicate的方法。

class User < ActiveRecord::Base
  # ...
  def replicate
    replica = dup

    comments.each do |comment|
      replica.comments << comment.dup
    end

    replica
  end
end


遵循这些原则。

10-08 05:54
查看更多