6

次のコードがあるとします。

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

create メソッドは暗黙的に ActiveRecord トランザクションにラップされますか、それともトランザクション ブロックにラップする必要がありますか? ラップする必要がある場合、これが最善のアプローチでしょうか?

4

1 に答える 1

4

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

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

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

于 2012-07-03T04:30:16.873 に答える