Je me demandais dans quel ordre les rappels et validations sont appelés lorsqu'un objet ActiveRecord est créé.
Supposons que j'ai des validations et rappels personnalisés tels que les suivants:
validates :reference_code, :if => :reference_code, :on => :create
before_create :assign_reference
lequel sera exécuté en premier? Le rappel doit d'abord se produire, sinon la validation peut échouer.
La version la plus récente de cette liste pour la dernière version de Rails peut être trouvée dans le ActiveRecord::Callbacks
documentation . Les listes pour Rails 4, 3 & 2 sont ci-dessous.
La version la plus récente de cette liste se trouve dans les Rails 4 Guides .
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
after_commit/after_rollback
before_validation
after_validation
before_save
around_save
before_update
around_update
after_update
after_save
after_commit/after_rollback
before_destroy
around_destroy
after_destroy
after_commit/after_rollback
La version la plus récente de cette liste se trouve dans les Rails 3 Guides .
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
before_validation
after_validation
before_save
around_save
before_update
around_update
after_update
after_save
before_destroy
around_destroy
after_destroy
La version la plus récente de cette liste se trouve dans les Guides Rails 2.
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
INSERT
opérationafter_create
after_save
before_validation
before_validation_on_update
after_validation
after_validation_on_update
before_save
before_update
UPDATE
opérationafter_update
after_save
before_destroy
DELETE
opération after_destroy
Puisque vous devez d'abord valider le reference_code
, les assign_reference
la méthode peut être appelée dans le after_validation
rappel ou tout rappel apparaissant après dans la liste que j'ai fournie ci-dessus.
Voici une liste avec tous les rappels Active Record disponibles , listés dans le même ordre dans lequel ils seront appelés pendant les opérations respectives:
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
after_commit/after_rollback
before_validation
after_validation
before_save
around_save
before_update
around_update
after_update
after_save
after_commit/after_rollback
before_destroy
around_destroy
after_destroy
after_commit/after_rollback
after_save
s'exécute à la fois sur la création et la mise à jour, mais toujours après les rappels plus spécifiques after_create
et after_update
, quel que soit l'ordre dans lequel les appels de macro ont été exécutés.
before_destroy
les rappels doivent être placés avant dependent: :destroy
associations (ou utilisez l'option prepend: true), pour vous assurer qu'elles s'exécutent avant la suppression des enregistrements par dependent: :destroy
.