Ci può spiegare in dettaglio ciò che l' :before_save
e :before_create
Ruby on Rails callback sono, e che cosa hanno a che fare con Rails convalide? La convalida si verifica dopo :before_save
o :before_create
?
Ci può spiegare in dettaglio ciò che l' :before_save
e :before_create
Ruby on Rails callback sono, e che cosa hanno a che fare con Rails convalide? La convalida si verifica dopo :before_save
o :before_create
?
Risposte:
In un'operazione di creazione in Rails, ci sono sei callback prima dell'operazione del database e due dopo. In ordine, questi sono:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
Le operazioni di aggiornamento hanno esattamente lo stesso set, tranne leggere update
invece che create
ovunque (e AGGIORNARE anziché INSERT ).
Da questo, è possibile vedere che la convalida viene eseguita prima dei callback before_save
e before_create
.
Si before_save
verifica leggermente prima del before_create
. Per quanto ne so, non accade nulla tra loro; ma si before_save
attiverà anche sulle operazioni di aggiornamento, mentre si before_create
attiverà solo sulle creature.
after_save
o after_create
?
after_save
o after_create
callback, self
è il record che è stato appena salvato, come esiste dopo il salvataggio. Che i campi generati automaticamente comprende piace id
, created_at
, updated_at
.
before_create
riferisce al salvataggio di un nuovo oggetto nel database, non al create
metodo effettivo chiamato. Pertanto, before_create
può ancora essere attivato anche dal save
metodo.
before_save
3o e il before_create
5o.
before_save
viene chiamato ogni volta che un oggetto viene salvato. Quindi per oggetti nuovi ed esistenti. (crea e aggiorna azione)
before_create
solo prima della creazione. Quindi solo per nuovi oggetti (crea azione)
before_create
vs before_save :on => :create
A volte devi stare attento all'ordine dei callback
Vedi qui per maggiori dettagli:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create
non funziona (almeno su binari 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
eafter_validation_on_create
vengono rimossi da Rails 3 , invece usabefore_validation
eafter_validation
rispettivamente con opzione:on => :create
.