在rails中创建对象及其所有关联模型的副本

Jim*_*kar 5 ruby clone ruby-on-rails-3.2

我正在创建rails中对象的副本及其所有相关的关联模型.但我无法找到解决方案.我不想使用任何像Amoeba这样的宝石.模型之间的关系是这样的.

class ClassToCopy
    has_many :cups
    has_many :cup_parts, through :cups
    belongs_to :xyz
end
Run Code Online (Sandbox Code Playgroud)

所以我想保留一个像CopyToCopy这样的按钮,然后单击它就可以创建该对象的新副本以及所有关联.就像ClassToCopy的对象有10个杯子和4个cup_parts一样,那么也应该创建这些类的相应对象.我已尝试使用clonedup(使用rails 3.2.x),但clone不会从原始对象创建新对象,dup不允许关联.因此我很困惑该做什么.

Kri*_*ris 3

您可以覆盖dup以返回一个新对象和每个关联的新对象,例如:

class Thing
  has_many :cups

  def dup
    super.tap do |new_thing|
      self.cups.each do |cup|
        new_thing.cups << cup.dup
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)