5

私は、レールとそれに関連するすべての関連モデルでオブジェクトのコピーを作成することに取り組んでいます。しかし、私はその解決策を見つけることができません。Amoebaのような宝石は使いたくありません。モデル同士の関係はこんな感じ。

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

したがって、copy ClassToCopy のようなボタンを保持し、それをクリックすると、そのオブジェクトの新しいコピーがすべての関連付けとともに作成されます。ClassToCopy のオブジェクトに 10 個の cups と 4 個の cup_parts がある場合と同様に、それらのクラスの対応するオブジェクトも作成する必要があります。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 に答える