Ruby嵌套事务:如果外部事务回滚,嵌套事务会回滚吗?

时间:2018-10-23 11:14:53

标签: ruby-on-rails ruby ruby-on-rails-3

model1.rb
def method1
   Model1.transaction do
      model2_ref_obj = Model2.find(some_id)
      model2_ref_obj.method1
  end
end


model2.rb
def method1
   Model2.transaction do
   ## so some work
   self.save!
   end
end

但是,由于某些问题,model1的事务回滚也将使内部事务也回滚。

1 个答案:

答案 0 :(得分:0)

如果错误发生在第二个事务性块中,则该错误块可以有效地解决该错误,这意味着第一个事务性块认为一切都是虚假的,继续进行并提交事务-包括应该回滚的事务在第二个交易区块中

嵌套事务时必须非常小心。简短的答案是,它取决于嵌套的结构方式。一些不错的阅读:

https://pragtob.wordpress.com/2017/12/12/surprises-with-nested-transactions-rollbacks-and-activerecord/