Rails/ActiveRecord: speichern Sie die änderungen an einem Modell zugeordneten Sammlungen
Muss ich änderungen speichern, um einzelne Elemente in einer Sammlung für ein Modell, oder gibt es eine Methode, die ich anrufen kann um Sie zu speichern, wenn ich das Modell speichern.
#save
nicht scheinen, es zu tun. Zum Beispiel:
irb> rental = #...
#=> #<Rental id: 18737, customer_id: 61, dvd_id: 3252, date_rented: "2008-12-16 05:00:00", date_shipped: "2008-12-16 05:00:00", date_returned: "2008-12-22 05:00:00">
irb> rental.dvd
#=> #<Dvd id: 3252, title: "The Women of Summer", year: 1986, copies: 20, is_new: false, is_discontinued: false, list_price: #<BigDecimal:1a48f0c,'0.1599E2',8(8)>, sale_price: #<BigDecimal:1a48ed0,'0.1599E2',8(8)>>
irb> rental.dvd.copies += 1
#=> 21
irb> rental.save
#=> true
irb> rental.dvd
#=> #<Dvd id: 3252, title: "The Women of Summer", year: 1986, copies: 21, is_new: false, is_discontinued: false, list_price: #<BigDecimal:1a2e9cc,'0.1599E2',8(8)>, sale_price: #<BigDecimal:1a2e97c,'0.1599E2',8(8)>>
irb> Dvd.find_by_title('The Women of Summer')
#=> #<Dvd id: 3252, title: "The Women of Summer", year: 1986, copies: 20, is_new: false, is_discontinued: false, list_price: #<BigDecimal:1a30164,'0.1599E2',8(8)>, sale_price: #<BigDecimal:1a30128,'0.1599E2',8(8)>>
Im obigen Beispiel, die Kopie der DVD, die der Vermietung scheint nicht zu aktualisieren Sie die Kopie in der DB (man beachte die unterschiedliche Anzahl der Kopien).
Du musst angemeldet sein, um einen Kommentar abzugeben.
einfach eine Miete.dvd.speichern, nachdem Sie erhöhen den Wert oder im obigen Fall könnten Sie
wird auch automatisch speichern, beachten Sie die '!' auf Inkrement!
Können Sie konfigurieren, ActiveRecord-Kaskade-änderungen speichern, um die Elemente in einer Sammlung für ein Modell, indem die
:autosave => true
option bei der Deklaration der Verein. Lesen Sie mehr.Beispiel:
Dies ist nicht ganz richtig. Können Sie die "build" - Methode wird die Kraft speichern. Für den sake des Beispiels davon ausgehen, dass Sie ein Unternehmen haben, das Modell und die Mitarbeiter (Firma has_many Mitarbeiter). Sie könnten etwas tun wie:
Schaffen würde alle 4 Einträge, die das Unternehmen aufnehmen und die 3 Mitarbeiter-Datensätze und die company_id würde nach unten gedrückt werden, um die Mitarbeiter-Objekt entsprechend.
Haben Sie dies selbst zu tun. Active Record nicht cascade speichern von Vorgängen in has_many Beziehungen nach dem ersten speichern.
Könnten Sie automatisieren den Prozess mit ein
before_save
Rückruf.Dieser Beitrag nützlich sein kann:
http://erikonrails.snowedin.net/?p=267
Erik, beschreiben, wie "accepts_nested_attributes_for" im Modell und "< "% f".fields_for %> in der Ansicht, die Arbeit zu tun.
Seine detaillierte Beschreibung finden Sie in:
http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html