2

我需要在 Rails 中复制一条记录,然后在创建记录之前将其呈现为新形式。

一切都遵循这个有用的答案,但我还需要用 has_many_belongs_to_many 关联填充记录

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

4

1 回答 1

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

沿着这些思路。

于 2013-02-02T10:29:29.727 回答