Quel est l’ordre des rappels et validations ActiveRecord?

Je me demandais dans quel ordre les callbacks et les validations sont appelés lorsqu’un object ActiveRecord est créé.

Disons que j’ai des validations et des rappels personnalisés comme ceux-ci:

validates :reference_code, :if => :reference_code, :on => :create before_create :assign_reference 

lequel courra en premier? Le rappel doit avoir lieu en premier ou la validation peut échouer.

La version la plus récente de cette liste pour la dernière version de Rails est disponible dans la documentation ActiveRecord::Callbacks . Les listes pour les rails 4, 3 et 2 sont ci-dessous.

Rails 4

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

Créer un object

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

Mettre à jour un object

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

Détruire un object

  • 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 guides Rails 3 .

Créer un object

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

Mettre à jour un object

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

Détruire un object

  • before_destroy
  • around_destroy
  • after_destroy

Rails 2

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

Créer un object

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

Mettre à jour un object

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

Détruire un object

  • before_destroy
  • Opération DELETE
  • after_destroy

Comme vous devez d’abord valider le assign_reference reference_code , la méthode assign_reference peut être appelée dans le rappel after_validation ou tout rappel apparaissant après dans la liste que j’ai fournie ci-dessus.