複数の更新系処理を同時にCOMMITする

INDEX PAGE

複数の更新系処理を同時にCOMMITする


一つのアクションの中で、複数の更新処理を行う場合があります。
ショッピングサイトでは、買い上げと同時に在庫を減らすと思います。
この時、売上が成功したのに在庫更新処理でエラーが発生すると
在庫の数が合わなくなる事態となります。

これを避けるために
RDBMSではトランザクション機能というものが存在し
COMMIT/ROLLBACKなどがこれを行うためのきのうとなります。

RailsActiveRecordの中でこの機能を利用するには
下記のように記述します。

ActiveRecord::Base::transaction() do

  ##一つ目のテーブル更新
  @hoge = Hoge.find(params[:id])
  @hoge.upd = '1'
  @hoge .save

  ##二つ目のテーブル更新
  @fuga = Fuga.find(params[:id])
  @fuga.upd = '1'
  @fuga.save

end

このように記述することで、例えば@hogeの更新後に@fugaの更新に失敗したときに
まとめてRollBackしてくれます。

INDEX PAGE