Tengo una configuración simple de User
y UserProfile
modelo con el usuario has_one :user_profile
y perfil de usuario belongs_to :user
.Rieles - secuencia de ejecución de después de crear devolución de llamada y atributos anidados
Pero no puedo entender cómo Rails define el orden de ejecución after_create
callback y accepts_nested_attributes_for
definidos en mi modelo. Consideremos estos dos casos.
Caso 1:
class User < ActiveRecord::Base
has_one :user_profile
accepts_nested_attributes_for :user_profile
after_create :test_test
end
Ahora, si puedo crear un usuario (con user_profile_attributes picadillo también) a través de la consola, la devolución de llamada after_create
se activa cuando el usuario y se crea su perfil de usuario.
Caso 2: Si el after_create
se coloca en la parte superior,
class User < ActiveRecord::Base
after_create :test_test
has_one :user_profile
accepts_nested_attributes_for :user_profile
end
la devolución de llamada se activa después de que un usuario ha sido creado, pero antes de crear un perfil de usuario.
Es así como se espera que funcione. ¿Qué hace Rails internamente aquí? ¿La secuencia de ejecución simplemente está determinada por el orden del código?
¿Por dónde empiezo a profundizar o depurar esto?
Lo probaría de nuevo, el orden del código en forma de devoluciones de llamada no tiene nada que ver con el orden de ejecución .. – Rabbott
@Rabbott - ¡Lo aprecio! – prasvin
Usar 'inverse_of' puede ser útil para resolver dependencias y problemas de guardado en la creación o en el guardado. p.ej. 'has_one: user_profile, reverse_of:: user' – ybart