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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top