我希望 a
和 b
自 raise
起为零内部事务将“冒泡”到外部事务,但事实并非如此。 a
和 b
还是有值(value)观的。为什么会这样?
a = nil
b = nil
Foo.transaction do
a = Bar.create! name: 'a'
Foo.transaction do
b = Bar.create! name: 'b'
raise ActiveRecord::Rollback
end
end
puts "a: #{a.reload.inspect}" #has value
puts "b: #{b.reload.inspect}" #has value
最佳答案
从我收集的 the ROR docs和 this post内部事务回滚,但外部事务仍然提交内部事务,因此尽管raise
,所有对象都被持久化。 .
关于ruby-on-rails - Ruby on Rails - 为什么不回滚 "raise ActiveRecord::Rollback"的嵌套事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56280161/