我希望 a
和 b
为nil,因为内部事务中的 raise
会"冒出来"到外部事务,但事实并非如此。a
和b
仍然具有值。为什么会发生?
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
,所有对象都会持续存在。