В соответствии с документами ActiveRecord:: Transactions:: ClassMethods, не новая вложенная транзакция будет игнорировать Откат. Из документов:
User.transaction do
User.create(username: 'Kotori')
User.transaction do
User.create(username: 'Nemu')
raise ActiveRecord::Rollback
end
end
raise ActiveRecord::Rollback
игнорируется, потому что он находится в дочерней транзакции (вернее, он все еще находится в рамках родительской транзакции, а не ее собственной). Я не понимаю, почему вызов Rollback будет проигнорирован обоими? Я вижу, что, поскольку "транзакция" для ребенка не является транзакцией, она не откатывает блок "Nemu", но почему он не вызывает откат для родителя? Скрывает ли дочерняя транзакция откат?
Другими словами, почему не существует способа отката родительской транзакции из внутри вложенного дочернего элемента?