我需要在Rails中复制一条记录,然后在创建记录之前将它渲染成一个新的形式。
在this有用的答案后,一切正常,但我需要使用has_many_belongs_to_many关联来填充记录
方法dup()让我复制记录中的所有内容但是它的关联,我也看到有一个gem Amoeba可以做一个非常通用的深度克隆,但我想知道是否有一个更简单的解决方案没有使用宝石
答案 0 :(得分:6)
Rails没有内置的深度克隆。在Rails 2.3.x中,您有clone
来克隆活动记录属性。在Rails> 3中,他们将此方法重命名为dup
,现在缺少其文档。但是,它与clone
完全相同,其文档说明如下。
请注意,这是一个很浅的" clone:它复制对象的属性 只是,不是它的联想。深度"深度"克隆是 特定于应用程序,因此留给应用程序 根据需要实施。
因此,如果您想要克隆关联,那么您就是自己的。在我的项目中,我为此目的使用了一个名为replicate
的方法。
class User < ActiveRecord::Base
# ...
def replicate
replica = dup
comments.each do |comment|
replica.comments << comment.dup
end
replica
end
end
沿着这些方向发展。