ActiveRecord回调列表

Nim*_*deh 34 activerecord ruby-on-rails callback

我现在已经经历了一段时间的rails源代码,我认为除了以下方法之外还有更好的方法来获取所有回调列表:ActiveRecord::Callbacks::CALLBACKS- 这是一个常量列表.

这意味着如果你使用像devise_invitable这样的宝石,它会添加一个:invitation_accepted用分数调用的新回调:after,:before然后ActiveRecord::Callbacks::CALLBACKS就无法工作了.

除了打开rails模块并确保每个模型类的内部回调列表之外,您知道一个简单的修复方法吗?

Sam*_*roa 45

您可以调用Model._save_callbacks以获取保存时所有回调的列表.然后,您可以将其过滤到您需要的类型,例如:before或者:after像这样:

Model._save_callbacks.select {|cb| cb.kind == :before}
Run Code Online (Sandbox Code Playgroud)

同样适用于Model._destroy_callbacks

  • 另请查看文档以获取更多详细信息:http://apidock.com/rails/ActiveRecord/Callbacks (2认同)

GMA*_*GMA 19

文件说:"总共有19回调" ......但他们似乎不知道说什么所有的19实际上是!

对于那些像我一样使用Google搜索"所有ActiveRecord回调列表"的人,这里是列表(通过ActiveRecord::Callbacks::CALLBACKS问题中描述的使用找到):

:after_initialize
:after_find
:after_touch
:before_validation
:after_validation
:before_save
:around_save
:after_save
:before_create
:around_create
:after_create
:before_update
:around_update
:after_update
:before_destroy
:around_destroy
:after_destroy
:after_commit
:after_rollback
Run Code Online (Sandbox Code Playgroud)