What is the order of ActiveRecord callbacks and va

2019-01-12 21:36发布

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 like the following:

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

which one will run first? The callback needs to happen first or else the validation may fail.

1条回答
姐就是有狂的资本
2楼-- · 2019-01-12 21:54

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.

Rails 4

The most up-to-date version of this list can be found in the Rails 4 Guides.

Creating an object

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

Updating an object

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

Destroying an object

  • before_destroy
  • around_destroy
  • after_destroy
  • after_commit/after_rollback

Rails 3

The most up-to-date version of this list can be found in the Rails 3 Guides.

Creating an object

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

Updating an object

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

Destroying an object

  • before_destroy
  • around_destroy
  • after_destroy

Rails 2

The most up-to-date version of this list can be found in the Rails 2.3 Guides

Creating an object

  • before_validation
  • before_validation_on_create
  • after_validation
  • after_validation_on_create
  • before_save
  • before_create
  • INSERT operation
  • after_create
  • after_save

Updating an object

  • before_validation
  • before_validation_on_update
  • after_validation
  • after_validation_on_update
  • before_save
  • before_update
  • UPDATE operation
  • after_update
  • after_save

Destroying an object

  • before_destroy
  • DELETE operation
  • after_destroy

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

查看更多
登录 后发表回答