トランザクションとは
データの整合性を保証するための処理のこと。
途中で処理が失敗したらそれまで行った処理を元に戻す(ロールバック)。
例えば、銀行でAさんがBさんに1万円を送金するとする。
この場合、
①Aさんの口座から1万円を引く
②Bさんの口座に1万円を足す
という処理を行うが、もし②の処理が何らかの理由でエラーになった場合、トランザクションを使わなければ、Aさんがただ1万円を損しただけになってしまう。
トランザクションを使うと、②が失敗したら①の処理が元に戻るので最悪の事態は免れることができる。
Railsのトランザクションの書き方
ActiveRecord:Base.transaction
を使う。
main_controller.rb
ActiveRecord::Base.transaction do
実行したい処理
end
トランザクションの注意点
例外が発生しないとロールバックは行われないことに注意する。
save!やupdate!など破壊メソッドの処理で失敗すると例外が起きる。