在after_validation
之前触发before_save
回调。如果有的话,那些回调之间会发生什么?为什么选择一个而不是另一个呢?
答案 0 :(得分:12)
根据项目是否为新记录,有after_validation_on_update
或after_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