複数の更新系処理を同時にCOMMITする
複数の更新系処理を同時にCOMMITする
一つのアクションの中で、複数の更新処理を行う場合があります。
ショッピングサイトでは、買い上げと同時に在庫を減らすと思います。
この時、売上が成功したのに在庫更新処理でエラーが発生すると
在庫の数が合わなくなる事態となります。
これを避けるために
RDBMSではトランザクション機能というものが存在し
COMMIT/ROLLBACKなどがこれを行うためのきのうとなります。
RailsのActiveRecordの中でこの機能を利用するには
下記のように記述します。
ActiveRecord::Base::transaction() do
##一つ目のテーブル更新
@hoge = Hoge.find(params[:id])
@hoge.upd = '1'
@hoge .save##二つ目のテーブル更新
@fuga = Fuga.find(params[:id])
@fuga.upd = '1'
@fuga.saveend
このように記述することで、例えば@hogeの更新後に@fugaの更新に失敗したときに
まとめてRollBackしてくれます。