Мне немного неясно, как обрабатывать исключения при использовании транзакций с активной записью в рельсах. Я видел, как многие из них использовали,
Метод: 1
def update
ActiveRecord::Base.transaction do
begin
# Some logic
rescue StandardError => e
raise ActiveRecord::Rollback
end
end
end
и видел приведенную ниже логику во многих местах.
Метод: 2
def update
ActiveRecord::Base.transaction do
if object.update(update_params)
# success
else
# error handling
end
end
rescue => e
# error handling
end
То, что я считаю вторым методом, достаточно. Я думал, что сама транзакция откатится, если произойдет что-то непредвиденное или какая-либо логическая ошибка внутри транзакции, и мы сможем отловить их и сделать все, что захотим. Нужно ли перехватывать исключения внутри транзакции и вручную поднимать откат ? В чем разница между методами и в каком случае?