我需要在 Rails 中复制一条记录,然后在创建记录之前将其呈现为新形式。
一切都遵循这个有用的答案,但我还需要用 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
沿着这些思路。