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_validation
callback中调用assign_reference
方法,或者在上面提供的列表中出现的任何callback中调用assign_reference
方法。