2012-03-01 16 views
0

「ベストプラクティス」とは何か、または何かをトランザクションブロックにラップするときの一般的な経験則とは何ですか?ActiveRecordトランザクションはいつ使用する必要がありますか?

主なものは何かのコレクションに対してアクションを実行しているときで、何かが壊れた場合にロールバックしたいのですか?次のようなものがあります。

トランザクション内で実行することが有益なシナリオはありますか?

答えて

1

私は、トランザクションのために大いに役立つとは確信していません。一般に、あるオブジェクトの状態が別のオブジェクトの状態に依存している場合は、モデルでトランザクションを使用します。いずれかのオブジェクトの状態が正しくない場合、どちらもコミットされたくありません。

古典的な例は、もちろん銀行口座です。ある口座から別の口座にお金を振り替える場合は、それを受け取り口座に追加して保存してから送金口座から引き落としたいと考えません。もしその部分が間違っていたら、お金はちょうどなくなり、あなたはかなり怒っている顧客を持つでしょう。 1つのトランザクションで2つの部分を実行すると、エラーが発生した場合でもどちらもデータベースに何もコミットされません。

ActiveRecord Transaction Documentationは、トランザクションを使用する方法と理由について議論する驚くほど良い仕事をしています...さらに詳しい情報が必要な場合は常にWikipedia articleがあります。

+0

私はレーキタスクでもトランザクションを使用します。私はAPIから一括してたくさんのデータを収集し、挿入を高速化するために 'create'タスクの周りにトランザクションブロックを行います...タスクごとの接続を開いたり閉じたりするのではなく、挿入コマンドに1つの接続しか使用しません。 – ScottJShea

関連する問題