Wie man neue Kinder in BEFORE_UPDATE Rückruf für Active verschachtelte Attribute verarbeiten
-
19-09-2019 - |
Frage
ich ein Modell zum Gegenstand haben (sagen wir mal Parent) mit einem has_many Verband auf einem anderen Modellobjekt (Kind).
class Parent < ActiveRecord::Base
has_many :children
accepts_nested_attributes_for :children
end
class Child < ActiveRecord::Base
belongs_to :parent
end
Einen Elternteil, mag ich Code auf dem BEFORE_UPDATE Callback hinzufügen, um ein berechnetes Attribut auf seinen Kindern Basis einzustellen.
Das Problem, das ich habe in gelaufen ist, dass wenn ich die Methode Parent.update verwenden (id, att), das Hinzufügen atts für neue Kinder, die hinzugefügt in der atts Sammlung nicht verfügbar sind, während BEFORE_UPDATE (self.children gibt die alte Sammlung).
Gibt es eine Möglichkeit den neuen ohne Unordnung mit dem accepts_nested_attributes_for zurückzuholen?
Lösung
Was Sie funktioniert für mich beschreiben mit Rails 2.3.2. Ich glaube, Sie können nicht richtig an einen Elternteil der Kinder werden zuweisen. Sind die Kinder nach dem Update aktualisiert?
accepts_nested_attributes_for, wie in Ihrer Frage verwendet, schafft ein child_attributes Schriftsteller auf dem Elternteil. Ich habe das Gefühl, Sie zu aktualisieren sind versuchen: Kinder im Gegensatz zu: children_attributes.
Dies funktioniert Ihre Modelle mit wie beschrieben und im Anschluss an diesem BEFORE_UPDATE Rückruf:
before_update :list_childrens_names
def list_childrens_names
children.each{|child| puts child.name}
end
diese Befehle in der Konsole:
Parent.create # => Parent(id => 1)
Parent.update(1, :childrens_attributes =>
[{:name => "Jimmy"}, {:name => "Julie"}])
erzeugen folgende Ausgabe:
Jimmy
Julie