Tengo dos modelos con una asociación uno a muchos. Quiero establecer un valor predeterminado en el modelo hijo en la inicialización en función de algún estado del padre. Esto implica tener un fuego de devolución de llamada after_initialize en el niño que necesita acceder al padre a través de la asociación belongs_to. El problema es que cuando instanciamos al niño usando el método de compilación, la asociación con el padre es nula en la devolución de llamada after_initialize. ¿Es este comportamiento esperado? Estoy en los carriles 3.0.6Rails association nil in after_initialize
Un ejemplo de juguete:
class Merchant < ActiveRecord::Base
has_many :products
end
class Product < ActiveRecord::Base
belongs_to :merchant
after_initialize :set_default_value
def set_default_value
if merchant.state
self.foo = some_value
else
self.foo = some_other_value
end
end
end
Y en un controlador:
product = merchant.products.build
En la llamada a set_default_value, comerciante es nulo aunque parece que shouldn 't ser.
se ha guardado todavía la instancia comerciante original, antes de llamar comerciante. products.build? – Pasted
Sí, el comerciante sería un registro existente en el archivo db, por lo que tendría un ID válido. – Dino
Lo probé casi exactamente como lo tienes y funcionó para mí. La única diferencia es que 'productos de clase 'debe ser' producto de clase 'sin el' s'. –