【发布时间】:2023-03-27 14:10:02
【问题描述】:
我正在以这种方式创建 ActiveRecord 事务
ActiveRecord::Base.transaction do
MyModel.create!(name: "value")
OtherModel.create!(name: "value")
end
我想为此事务设置一个特定的after_commit 回调。我不想将它附加到任何一个模型上,因为我不会在每次单独创建其中一个时执行它。
我也不能简单地在transaction 块的末尾写一些代码,因为可能真正的事务是在这段代码之外创建的(我没有将require_new 选项设置为true)
有没有办法为特定的事务实例设置回调?
非常感谢
【问题讨论】:
-
请问您为什么不想将它们添加到模型中?那是要做的事情,我认为不可能按照您的建议去做。但是,我们可能会找到一种方法来解决您不想触摸模型的任何原因。
-
您可以将事务包装在
beginrescue块中,并在事务之后立即调用 after_commit 。如果交易失败,区块会被救出,回调不会被调用。
标签: ruby-on-rails ruby activerecord transactions activesupport