Ruby on Rails - 为什么嵌套的事务"raise ActiveRecord::Rollback"回滚?



我希望 ab为nil,因为内部事务中的 raise会"冒出来"到外部事务,但事实并非如此。ab仍然具有值。为什么会发生?

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

从我从ROR DOC中收集到的内容,这篇文章内部交易倒退,但是外部事务仍然提交内部交易,因此,尽管raise,所有对象都会持续存在。

最新更新