Ruby on Rails: Erstellen eines untergeordneten Objekts mit Standardwerten, wenn das übergeordnete Element erstellt wird

9

Ich habe eine Eltern-Kind-Modell-Beziehung. In der migration.rb des untergeordneten Elements haben die Spalten des untergeordneten Modells jeweils Standardwerte (mit Ausnahme der Spalte parent_id).

Wie kann ich ein neues übergeordnetes Objekt erstellen, so dass ein untergeordnetes Objekt erstellt und in seiner Tabelle mit den Daten aus den Standardwerten zusammen mit der übergeordneten ID gespeichert wird?

Ich denke, dass es etwas mit einem after_create im Elternmodell zu tun haben wird, aber ich bin mir nicht sicher, wie ich es einrichten soll.

    
Reti 17.08.2010, 03:53
quelle

2 Antworten

13

Überarbeitet: Ich habe die zu benutzende Antwort überarbeitet, um die zugehörigen Modelle zu erstellen und nicht zu erstellen. Die ActiveRecord-Maschinerie kümmert sich dann um das Speichern der zugeordneten Modelle, sobald das übergeordnete Element gespeichert wird.

Ich habe sogar diesen Code getestet!

%Vor%

Hinzugefügt ...

Die Build-Methode wird von der Maschine des Owning-Modells durch die Anweisung has_many hinzugefügt. Da das Beispiel has_many: doors (Modellname Door) verwendet, lautet der Build-Aufruf doors.build

Siehe die Dokumente für has_many und has_one , um alle zusätzlichen Methoden anzuzeigen, die hinzugefügt werden.

%Vor%

Rails 2.x hat die Autosave-Option für Assoziationen eingeführt. Ich denke nicht, dass es für das oben genannte gilt (ich benutze Standard). Testergebnisse automatisch speichern

    
Larry K 17.08.2010, 04:01
quelle
1

Sie haben nicht angegeben (oder ich habe es überlesen), welche Art von Beziehung Sie verwenden. Wenn Sie eine Eins-zu-eins-Beziehung verwenden, wird beispielsweise "has_one" create nicht funktionieren. In diesem Fall müssen Sie etwas wie folgt verwenden:

in parent.rb

%Vor%

after_create könnte auch funktionieren, habe das nicht getestet.

während in child.rb

%Vor%

Ich habe mich in der aktuellen Anwendung mit dem Einrichten eines Benutzermodells ziemlich angestrengt.

Ссылка Sie können sehen, dass has_one nicht parent.build oder parent.create

unterstützt

Hoffe, das hilft. Ich bin neu bei Ruby und mache mich langsam auf den Weg durch den Ruby-Dschungel. Eine schöne Reise, aber leicht zu verlieren.:)

    
KimJongIl 17.08.2010 08:45
quelle

Tags und Links