after_validation和before_save之间会发生什么?

时间:2013-02-11 00:45:10

标签: ruby-on-rails

after_validation之前触发before_save回调。如果有的话,那些回调之间会发生什么?为什么选择一个而不是另一个呢?

2 个答案:

答案 0 :(得分:12)

根据项目是否为新记录,有after_validation_on_updateafter_validation_on_create

正如Max声明的那样,如果对象无效,链在到达before_save回调之前就会被中断,所以如果你需要发生某些事情而不管对象的有效性before_save是不是它的地方。

供参考: http://apidock.com/rails/ActiveRecord/Callbacks/after_validation_on_create

答案 1 :(得分:1)

this.state = { ... cardType: props.cardType, ... }; after_validation_on_create已从Rails 3.0中删除。

新语法形式:

after_validation_on_update

现在它们之间什么也没执行。

为答案添加出色的评论:

after_validation after_validation, on: :update # or :update after_validation, on: [ :create, :update ] 将在您调用after_validation时被调用,因此在某些情况下,您只想检查记录的有效性,但在验证后仍然可以运行某些内容。根据我的经验,从来没有机会使用#valid?。” @jvnill

“除了jvnill所说的以外,如果对象无效,则不会保存该对象。因此,对无效对象调用save不会触发after_validation回调,而会触发before_save ”。 @Max