首页 > 解决方案 > Rails 中的回调顺序

问题描述

如果我的模型文件中有这样的代码:

after_destroy :method_1
after_destroy :method_2

是method_1和method_2一起执行还是先method_1然后method_2?如果我这样做会有所不同:

after_destroy :method_1, method_2

对文档的引用会很棒。谢谢

标签: ruby-on-rails

解决方案


ActiveRecord::Callbacks在“Ordering callbacks”中记录顺序。

非事务性回调按照定义的顺序执行。

class Topic < ActiveRecord::Base
  after_save :log_children
  after_save :do_something_else

  ...
end

当一个 Topic 被保存时,log_children 会被执行,然后 do_something_else。

事务回调(after_commit, after_rollback)则相反,最后定义的事务回调首先执行。

class Topic < ActiveRecord::Base
  after_commit :log_children
  after_commit :do_something_else

  ...
end

提交主题时,首先运行 do_something_else,然后运行 ​​log_children。

如果有任何疑问,您可以将它们组合成一个回调。

class Topic < ActiveRecord::Base
  after_commit :commit_callback

  private def commit_callback
    log_children
    do_something_else
  end

  ...
end

推荐阅读