ActiveRecordcallback和validation的顺序是什么?

我想知道在创buildActiveRecord对象时调用的callback和validation的顺序是什么。

比方说,我有一些自定义validation和callback,如下所示:

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

哪一个会先运行? callback需要先发生,否则validation可能会失败。

ActiveRecord::Callbacks文档中可以find最新版本的Rails的最新版本。 下面是Rails 4,3和2的列表。

Rails 4

这个列表的最新版本可以在Rails 4指南中find 。

创build一个对象

  • 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

Rails 3

这个列表的最新版本可以在Rails 3指南中find 。

创build一个对象

  • 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

Rails 2

这个列表的最新版本可以在Rails 2.3指南中find

创build一个对象

  • before_validation
  • before_validation_on_create
  • after_validation
  • after_validation_on_create
  • before_save
  • before_create
  • INSERT操作
  • after_create
  • after_save

更新对象

  • before_validation
  • before_validation_on_update
  • after_validation
  • after_validation_on_update
  • before_save
  • before_update
  • UPDATE操作
  • after_update
  • after_save

摧毁一个对象

  • before_destroy
  • DELETE操作
  • after_destroy

由于您需要首先validationreference_code ,因此可以在after_validationcallback中调用assign_reference方法,或者在上面提供的列表中出现的任何callback中调用assign_reference方法。