Ruby on Rails-为什么不嵌套“提高ActiveRecord :: Rollback”回滚的事务?

时间:2019-05-23 17:19:16

标签: ruby-on-rails

我希望ab为零,因为内部事务中的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

1 个答案:

答案 0 :(得分:0)

根据我从the ROR docsthis post收集的信息,内部事务回滚,但是外部事务仍然提交内部事务,因此尽管有raise,所有对象仍然存在。