我正在对Postgres数据库进行一系列更新。在这些更新的中途,我需要运行一大块代码,这些代码也会修改数据库,但不能在事务中。
我发现了DB.after_commit
事务挂钩,看起来很完美,除了它没有表现出我的预期:
acc = []
acc << ["before", DB.in_transaction?]
DB.transaction do
acc << ["inside", DB.in_transaction?]
SomeModel.create(value: "foo")
DB.after_commit {
acc << ["after_commit", DB.in_transaction?]
}
end
acc << ["after", DB.in_transaction?]
我希望acc
为[["before",false],["inside",true],["after_commit",false],["after",false]]
,但我看到[["before",false],["inside",true],["after_commit",true],["after",false]]
有没有办法阻止回调在事务中运行?
答案 0 :(得分:1)
Database#in_transaction?
在after_commit
区块内显然不准确。但是after_commit
肯定会在COMMIT
发生之后被调用,而不是之前。