У меня есть сложное действие внутри контроллера, который выполняет несколько запросов на обновление базы данных.
Как я могу сделать это действие действует как транзакция без какого-либо структурного рефакторинга?
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