【发布时间】:2017-10-05 18:45:38
【问题描述】:
比如说,我有一个包含多个插件的 RoR 应用程序。这些插件中的每一个都在模型上实现了 after_save 回调。我需要再创建一个带有两个回调的插件,比如start 和finish。如何保证回调的执行顺序如下?
- MyPlugin.start
- OtherPlugin_1.after_save_1
- OtherPlugin_1.after_save_X
- OtherPlugin_X.after_save_1
- ...
- MyPlugin.finish
即我的回调应该在任何其他 after_save 之前调用,并且在所有其他 after_save 回调完成执行之后立即调用。
【问题讨论】:
-
您是否受限于安全?提交后你不能完成吗?
-
@Leito,这是目前的一个选项,因为到目前为止似乎没有 after_commit 回调,但我只想在没有更通用的解决方案时才使用它。
-
我建议在模型上创建一个 after_save,然后在该方法中,按照您想要的顺序调用每个插件函数。没有必要让插件导出 after_save 回调而不是常规模型方法。
-
@maxpleaner,我无法更改模型,但我可以创建一个“元插件”,在单个 after_save 回调中调用所有其他方法。猜猜这可能会奏效。我想我什至可以根据一些方法命名约定自动收集这些方法。
标签: ruby-on-rails ruby callback ruby-on-rails-plugins