web-dev-qa-db-fra.com

Quel est l'ordre des rappels et validations ActiveRecord?

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.

50
Abid

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.

Rails 4

La version la plus récente de cette liste se trouve dans les Rails 4 Guides .

Création d'un objet

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save
  • after_commit/after_rollback

Mise à jour d'un objet

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save
  • after_commit/after_rollback

Détruire un objet

  • before_destroy
  • around_destroy
  • after_destroy
  • after_commit/after_rollback

Rails 3

La version la plus récente de cette liste se trouve dans les Rails 3 Guides .

Création d'un objet

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save

Mise à jour d'un objet

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save

Détruire un objet

  • before_destroy
  • around_destroy
  • after_destroy

Rails 2

La version la plus récente de cette liste se trouve dans les Guides Rails 2.

Création d'un objet

  • before_validation
  • before_validation_on_create
  • after_validation
  • after_validation_on_create
  • before_save
  • before_create
  • INSERT opération
  • after_create
  • after_save

Mise à jour d'un objet

  • before_validation
  • before_validation_on_update
  • after_validation
  • after_validation_on_update
  • before_save
  • before_update
  • UPDATE opération
  • after_update
  • after_save

Détruire un objet

  • 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.

120
Bart Jedrocha

Rails 5

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:

1 Création d'un objet

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save
  • after_commit/after_rollback

2 Mise à jour d'un objet

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save
  • after_commit/after_rollback

3 Détruire un objet

  • 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.

0
Deepsystm