Come elaborare nuovi bambini di callback before_update per gli attributi ActiveRecord annidati
-
19-09-2019 - |
Domanda
Ho un oggetto del modello (diciamo Parent) con un'associazione has_many su un altro oggetto del modello (Bambino).
class Parent < ActiveRecord::Base
has_many :children
accepts_nested_attributes_for :children
end
class Child < ActiveRecord::Base
belongs_to :parent
end
Il Parent, voglio aggiungere codice sul richiamata before_update per impostare un attributo calcolato sulla base dei suoi figli.
Il problema ho corso in è che quando uso il metodo Parent.update (id, att), aggiungendo atts per i nuovi figli, quelli aggiunti nella collezione atts non sono disponibili durante before_update (self.children restituisce il vecchia collezione).
Esiste un modo per recuperare il nuovo senza scherzi con l'accepts_nested_attributes_for?
Soluzione
Ciò che si descrive per me funziona con Rails 2.3.2. Credo che non si può essere assegnando ai figli di un genitore in modo corretto. Sono i bambini aggiornati dopo l'aggiornamento?
accepts_nested_attributes_for, come quello usato nella sua interrogazione, crea uno scrittore child_attributes sul genitore. Ho la sensazione che si sta cercando di aggiornare: i bambini in contrapposizione a: children_attributes.
Questo funziona utilizzando i modelli come descritto e ciò a seguito di callback before_update:
before_update :list_childrens_names
def list_childrens_names
children.each{|child| puts child.name}
end
questi comandi nella console:
Parent.create # => Parent(id => 1)
Parent.update(1, :childrens_attributes =>
[{:name => "Jimmy"}, {:name => "Julie"}])
produrre questo output:
Jimmy
Julie