I was wondering in what order are callbacks and validations called when an ActiveRecord object is created.
Let’s say I have some custom validations & callbacks l
The most-up-to-date version of this list for the latest version of Rails can be found in the ActiveRecord::Callbacks documentation. The lists for Rails 4, 3 & 2 are below.
The most up-to-date version of this list can be found in the Rails 4 Guides.
before_validationafter_validationbefore_savearound_savebefore_createaround_createafter_createafter_saveafter_commit/after_rollbackbefore_validationafter_validationbefore_savearound_savebefore_updatearound_updateafter_updateafter_saveafter_commit/after_rollbackbefore_destroyaround_destroyafter_destroyafter_commit/after_rollbackThe most up-to-date version of this list can be found in the Rails 3 Guides.
before_validationafter_validationbefore_savearound_savebefore_createaround_createafter_createafter_savebefore_validationafter_validationbefore_savearound_savebefore_updatearound_updateafter_updateafter_savebefore_destroyaround_destroyafter_destroyThe most up-to-date version of this list can be found in the Rails 2.3 Guides
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_createINSERT operationafter_createafter_savebefore_validationbefore_validation_on_updateafter_validationafter_validation_on_updatebefore_savebefore_updateUPDATE operationafter_updateafter_savebefore_destroyDELETE operationafter_destroySince you need to first validate the reference_code, the assign_reference method can be called in the after_validation callback or any callback appearing after it in the list I provided above.
Here is a list with all the available Active Record callbacks, listed in the same order in which they will get called during the respective operations:
before_validationafter_validationbefore_savearound_savebefore_createaround_createafter_createafter_saveafter_commit/after_rollbackbefore_validationafter_validationbefore_savearound_savebefore_updatearound_updateafter_updateafter_saveafter_commit/after_rollbackbefore_destroyaround_destroyafter_destroyafter_commit/after_rollbackafter_save runs both on create and update, but always after the more specific callbacks after_create and after_update, no matter the order in which the macro calls were executed.
before_destroy callbacks should be placed before dependent: :destroy associations (or use the prepend: true option), to ensure they execute before the records are deleted by dependent: :destroy.