2013-07-24 8 views
5

Ich arbeite an dem Erstellen einer Kopie eines Objekts in Schienen und alle verwandten zugeordneten Modelle. Aber dafür kann ich keine Lösung finden. Ich möchte kein Juwel wie Amoeba verwenden. Die Beziehungen zwischen den Modellen sind in etwa so.
Erstellen Sie eine Kopie eines Objekts und aller zugehörigen Modelle in Schienen

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

So möchte ich wie Kopie ClassToCopy einen Knopf halten und auf das auf Klick sollte mit allen Verbänden zusammen mit ihm eine neue Kopie dieses Objekts erstellen. Wie wenn ein Objekt von ClassToCopy 10 Tassen und 4 cup_parts hat, sollten auch entsprechende Objekte dieser Klassen erstellt werden. Ich habe versucht mit Klon und dup (mit Schienen 3.2.x), aber Klon erstellt kein neues Objekt von der ursprünglichen und dup keine Assoziationen erlaubt. Daher bin ich verwirrt was zu tun ist.

Antwort

1

könnten Sie könnten dup außer Kraft setzen ein neues Objekt und ein neues Objekt für jeden der assosiations zurückzukehren, so etwas wie:

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