Rails / ActiveRecord: speichert Änderungen an den zugeordneten Sammlungen eines Modells

7

Muss ich Änderungen an einzelnen Elementen in einer Objektgruppe für ein Modell speichern oder gibt es eine Methode, die ich aufrufen kann, um sie beim Speichern des Modells zu speichern.

#save scheint es nicht zu tun. Zum Beispiel:

%Vor%

Im obigen Beispiel scheint die Kopie der DVD, die der Verleih hat, die Kopie in der DB nicht zu aktualisieren (beachten Sie die abweichende Anzahl der Kopien).

    
rampion 15.05.2009, 17:15
quelle

5 Antworten

2

Machen Sie einfach eine rental.dvd.save, nachdem Sie den Wert erhöht haben oder im obigen Fall könnten Sie

verwenden %Vor%

was auch automatisch speichert, notieren Sie das '!' auf Inkrement!

    
Corban Brook 15.05.2009, 19:00
quelle
22

Sie können ActiveRecord so konfigurieren, dass Änderungen an Elementen in einer Auflistung für ein Modell in Kaskade gespeichert werden, indem die Option :autosave => true beim Deklarieren der Verknüpfung hinzugefügt wird. Lesen Sie mehr .

Beispiel:

%Vor%     
mockaroodev 25.04.2012 03:31
quelle
2
  

Sie müssen das selbst tun

Das ist nicht ganz richtig. Sie können die "Build" -Methode verwenden, die ein Speichern erzwingt. Nehmen Sie als Beispiel an, dass Sie ein Unternehmensmodell und Mitarbeiter haben (Unternehmen hat viele Mitarbeiter). Sie könnten etwas tun wie:

%Vor%

Würde alle 4 Datensätze, den Unternehmensdatensatz und die 3 Mitarbeiterdatensätze erstellen, und die Firmen-ID würde entsprechend auf das Mitarbeiter-Objekt übertragen.

    
Cody Caughlan 15.05.2009 17:41
quelle
1

Sie müssen das selbst machen. Active Record kaskuliert keine Sicherungsoperationen in has_many-Beziehungen nach dem ersten Speichern.

Sie könnten den Prozess mit einem before_save Callback automatisieren.

    
jmay 15.05.2009 17:37
quelle
1

Dieser Beitrag kann nützlich sein: Ссылка

Erik beschreibt, wie "access_nested_attributes_for" im Modell und & lt;% f.fields_for% & gt; in der Aussicht, die Arbeit zu erledigen.

Seine detaillierte Beschreibung findet sich in: Ссылка

    
Fábio Miranda 06.07.2012 17:30
quelle