我需要在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
遵循这些原则。