Ruby on Rails Callback, qual è la differenza tra: before_save e: before_create?


184

Ci può spiegare in dettaglio ciò che l' :before_savee :before_createRuby on Rails callback sono, e che cosa hanno a che fare con Rails convalide? La convalida si verifica dopo :before_saveo :before_create?

Risposte:


363

In un'operazione di creazione in Rails, ci sono sei callback prima dell'operazione del database e due dopo. In ordine, questi sono:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    INSERIMENTO DATABASE
  7. after_create
  8. after_save

Le operazioni di aggiornamento hanno esattamente lo stesso set, tranne leggere updateinvece che createovunque (e AGGIORNARE anziché INSERT ).

Da questo, è possibile vedere che la convalida viene eseguita prima dei callback before_savee before_create.

Si before_saveverifica leggermente prima del before_create. Per quanto ne so, non accade nulla tra loro; ma si before_saveattiverà anche sulle operazioni di aggiornamento, mentre si before_createattiverà solo sulle creature.


27
before_validation_on_createe after_validation_on_createvengono rimossi da Rails 3 , invece usa before_validatione after_validationrispettivamente con opzione :on => :create.
Dom

Come ti riferiresti al record che è stato appena creato durante l'utilizzo after_saveo after_create?
bcackerman,

@bcackerman - in after_saveo after_createcallback, selfè il record che è stato appena salvato, come esiste dopo il salvataggio. Che i campi generati automaticamente comprende piace id, created_at, updated_at.
Chowlett,

Ricorda anche che si before_createriferisce al salvataggio di un nuovo oggetto nel database, non al createmetodo effettivo chiamato. Pertanto, before_createpuò ancora essere attivato anche dal savemetodo.
Steve,

1
@Rads - ehm, no? I documenti elencano ancora il before_save3o e il before_create5o.
Chowlett,

136

before_saveviene chiamato ogni volta che un oggetto viene salvato. Quindi per oggetti nuovi ed esistenti. (crea e aggiorna azione)

before_createsolo prima della creazione. Quindi solo per nuovi oggetti (crea azione)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.