14

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

4

2 回答 2

12

有一个after_validation_on_updateafter_validation_on_create取决于该项目是否是一个新记录。

before_save并且正如 Max 所说,如果对象无效,则链在到达回调之前被中断,因此,如果您需要发生某些事情而不管对象的有效性before_save是不是它的地方。

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

于 2013-02-12T16:27:57.263 回答
3

after_validation_on_createafter_validation_on_update从 Rails 3.0 中删除。

新语法形式:

after_validation
after_validation, on: :update  # or :update
after_validation, on: [ :create, :update ]

现在他们之间没有执行任何操作。

在答案中添加出色的评论:

after_validation如果你打电话就会被调用,#valid?所以在某些情况下你可能只想检查记录的有效性,但在验证后仍然运行一些东西。根据我的经验,我从来没有机会使用after_validation.” @jvnill

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

于 2018-07-01T01:00:22.633 回答