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

Car*_*rlo 2 clone ruby-on-rails associations rails-activerecord

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

一切都按照这个有用的答案工作,但我需要用has_many_belongs_to_many关联填充记录

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

Max*_*yak 6

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
Run Code Online (Sandbox Code Playgroud)

沿着这些方向的东西.