在Rails中重复记录并使用其关联填充新表单

时间:2013-02-02 09:57:30

标签: ruby-on-rails associations clone rails-activerecord

我需要在Rails中复制一条记录,然后在创建记录之前将它渲染成一个新的形式。

this有用的答案后,一切正常,但我需要使用has_many_belongs_to_many关联来填充记录

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

1 个答案:

答案 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

沿着这些方向发展。