2012-07-03 6 views
6

Railsのコントローラアクションは、トランザクションボンドを暗黙的に定義していますか?次のコードを考える

def create 
    @something = Something.new(params[:something]) 
    thing = @something.thing # another model 

    # modification of attributes on both 'something' and 'thing' omitted 

    # do I need to wrap it inside a transaction block? 
    @something.save 
    thing.save 
end 

は、暗黙的にActiveRecordのトランザクションにラップさメソッドを作成し、または私はトランザクションブロックにそれをラップする必要があるでしょうか?私がそれをラップする必要がある場合は、これが最善の方法でしょうか?

答えて

4

簡単な答え:コードをトランザクションブロックに明示的にラップする必要があります。基本的には、参照整合性を維持するために、SQL文のグループを実行するときにトランザクションを使用する必要があります。

Something.transaction do 
    @something.save 
    thing.save 
end 

さらに読書:http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

関連する問題