データベースに対していくつかの更新クエリを実行する複雑なアクションがコントローラー内にあります。
構造的なリファクタリングを行わずに、このアクションをトランザクションのように機能させるにはどうすればよいですか?
データベースに対していくつかの更新クエリを実行する複雑なアクションがコントローラー内にあります。
構造的なリファクタリングを行わずに、このアクションをトランザクションのように機能させるにはどうすればよいですか?
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