Cómo procesar los nuevos niños de devolución de llamada para before_update atributos ActiveRecord anidado

StackOverflow https://stackoverflow.com/questions/2021059

Pregunta

Tengo un objeto del modelo (digamos los padres) con una asociación has_many en otro modelo de objetos (niño).

class Parent < ActiveRecord::Base
    has_many :children
    accepts_nested_attributes_for :children
end

class Child < ActiveRecord::Base
    belongs_to :parent
end

El Padre, quiero añadir código en la devolución de llamada before_update para establecer un atributo calculado en base a sus hijos.

El problema que he estado corriendo en es que cuando se utiliza el método Parent.update (id, atts), añadiendo atts para nuevos niños, los añadidos en la colección atts no están disponibles durante before_update (self.children devuelve el colección de edad).

¿Hay alguna manera de recuperar el nuevo sin jugar con el accepts_nested_attributes_for?

¿Fue útil?

Solución

Lo que describes me funciona con Rails 2.3.2. Creo que puede que no se asigna a los niños de los padres correctamente. Se actualizan los niños después de la actualización?

accepts_nested_attributes_for, tal como se utiliza en su pregunta, crea un escritor child_attributes en la matriz. Tengo la sensación de que está tratando de actualizar: los niños en lugar de: children_attributes.

Esto funciona utilizando sus modelos como se describe y esto después de devolución de llamada before_update:

before_update :list_childrens_names
def list_childrens_names
  children.each{|child| puts child.name}
end

estos comandos en la consola:

Parent.create # => Parent(id => 1)
Parent.update(1, :childrens_attributes => 
  [{:name => "Jimmy"}, {:name => "Julie"}]) 

producir esta salida:

Jimmy
Julie
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top