Действие транзакции с Ruby On Rails
-
06-09-2019 - |
Вопрос
У меня есть сложное действие внутри контроллера, которое выполняет несколько запросов на обновление базы данных.
Как я могу выполнить это действие действует как транзакция без какого-либо структурного рефакторинга?
Решение
MyModel.transaction do
begin
@model.update_stuff
@sub_model.update_stuff
@sub_sub_model.update_stuff
rescue ActiveRecord::StatementInvalid # or whatever
# rollback is automatic, but if you want to do something additional,
# add it here
end
end
Другие советы
Можно одновременно сделать все действия в контроллере транзакционными с помощью:
around_filter :transactional
def transactional
ActiveRecord::Base.transaction do
yield
end
end
Не связан с StackOverflow