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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top