5

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

class ClassToCopy
    has_many :cups
    has_many :cup_parts, through :cups
    belongs_to :xyz
end

所以我想保留一个像复制ClassToCopy这样的按钮,点击它应该创建该对象的一个​​新副本,以及它的所有关联。就像 ClassToCopy 的一个对象有 10 个杯子和 4 个杯子零件一样,那么这些类的对应对象也应该被创建。我尝试过使用clonedup(使用 rails 3.2.x),但 clone 不会从原始对象创建新对象,并且 dup 不允许关联。因此我很困惑该怎么做。

4

1 回答 1

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
于 2013-09-03T18:25:58.387 回答