ruby-on-rails - Rails 中的回调顺序
问题描述
如果我的模型文件中有这样的代码:
after_destroy :method_1
after_destroy :method_2
是method_1和method_2一起执行还是先method_1然后method_2?如果我这样做会有所不同:
after_destroy :method_1, method_2
对文档的引用会很棒。谢谢
解决方案
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
推荐阅读
- laravel - 如何在自己的 laravel 包中添加助手?(调用未定义的函数)
- windows - 网络资源不可用或进入备用路径
- ios - 如何在使用 xcode 开发 ios 应用程序时读取 csv 文件
- angular - Froala 编辑器 CSS 不应用角度 5
- java - 在 Java 中为 Test Rail 创建 Post Api
- c# - 单元测试基于 Prism 的 WPF 应用程序
- spring-boot - ClassNotFoundException:运行 JUnit5 时的 org.junit.platform.launcher.TestExecutionListener
- ruby-on-rails - CanCanCan 拒绝为 :create 加载集合
- python - python脚本中的变量正在发生变化,但是当我导入变量时,每次都是一样的
- vba - ws.Range(x).value 作为双精度类型不匹配