与提交数据库更新后运行 rails 代码相关,没有 after_commit,但我认为值得提出自己的问题。
如果我有这样的代码:
my_instance = MyModel.find(1)
MyModel.transaction do
my_instance.foo = "bar"
my_instance.save!
end
new_instance = MyModel.find(1)
puts new_instance.foo
这是始终输出“bar”而不是其先前值的保证吗?new_instance.foo
我正在寻找一种方法来确保在执行我的下一个语句之前提交上一个语句中发生的所有数据库操作。Rails 对此有一个 after_commit 钩子,但我不希望每次都执行此代码……仅在此特定上下文中。
我在 Transactions 文档中找不到任何表明 Transaction 块是否“阻塞”的内容。如果他们阻塞,那将满足我的要求。不幸的是,我想不出一种实用的方法来测试这种行为,以某种方式证实我的怀疑。