Ruby Вложенная транзакция: будет ли вложенная транзакция откатываться, если внешняя транзакция откатывается? - PullRequest
0 голосов
/ 23 октября 2018
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 голосов
/ 23 октября 2018

Если ошибка возникает во втором транзакционном блоке, ошибка эффективно устраняется этим блоком, а это означает, что первый блок транзакций считает, что все просто, идет вперед и фиксирует транзакции - , включая те, которые следует откатитьво втором транзакционном блоке .

При вложении транзакций нужно быть очень осторожным.Короткий ответ - это зависит от того, как структурировано вложение.Немного хорошего чтения:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...