Ho una semplice configurazione del modello User
e UserProfile
con Utente has_one :user_profile
e UserProfile belongs_to :user
.Rails: sequenza di esecuzione dopo la creazione di callback e attributi nidificati
Ma non riesco a capire come Rails definisce l'ordine di esecuzione della chiamata after_create
e accepts_nested_attributes_for
definito nel mio modello. Consideriamo questi due casi.
Caso 1:
class User < ActiveRecord::Base
has_one :user_profile
accepts_nested_attributes_for :user_profile
after_create :test_test
end
Ora, se creo un utente (con user_profile_attributes hash anche) tramite la console, il after_create
richiamata viene attivato dopo che l'utente e viene creato il suo profilo utente.
Caso 2: Se il after_create
è posta in alto,
class User < ActiveRecord::Base
after_create :test_test
has_one :user_profile
accepts_nested_attributes_for :user_profile
end
la richiamata viene attivato dopo che un utente è stato creato, ma prima di creare un profilo utente.
È questo il modo in cui è previsto che funzioni. Cosa fa Rails internamente qui? La sequenza di esecuzione è determinata semplicemente dall'ordine del codice?
Dove posso iniziare a scavare più in profondità o eseguire il debug di questo?
Vorrei testarlo nuovamente, l'ordine del codice sotto forma di callback non ha nulla a che fare con l'ordine di esecuzione .. – Rabbott
@Rabbott - Apprezzo! – prasvin
L'uso di 'inverse_of' potrebbe essere utile per risolvere dipendenze e problemi di salvataggio su create o on save. per esempio. 'has_one: user_profile, inverse_of:: user' – ybart