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方法。