トランザクション

f:id:utouto97:20210706233746p:plain

トランザクションとは

トランザクションは処理のまとまりです。

銀行の振り込みがトランザクションの例としてよく挙げられると思うので、ここでも銀行振り込みを例にします。

AさんからBさんの口座への振り込みを考えると、

  1. Aさんの口座額を減らす
  2. Bさんの口座額を増やす

という、二つの処理をする必要があります。

そして、これらの処理はひとまとまりである必要があります。
「1. Aさんの口座額を減らす」だけ処理されて、「2. Bさんの口座額を増やす」が処理されなかった場合、おかしなことになります。
そのため、これら二つの処理はひとまとまりで処理されるべきで、その途中でエラーが発生した場合は両方を取り消してやり直すことになります。

これを実現するのがトランザクションです。
上の二つの処理をひとまとまりとして扱うことができます。
途中でエラーが発生した場合は、両方とも取り消します。

Railsトランザクション

Railsで処理をまとめてトランザクション処理をするには、ActiveRecord::Base.transactionを使います。

ActiveRecord::Base.transaction do
end

上のように、ActiveRecord::Base.transactionで囲うことで、トランザクション処理ができます。
つまり、ActiveRecord::Base.transactionで囲まれた部分はひとまとまりとして処理されます。
途中で例外が発生した場合は、この中の処理はすべてキャンセルされます。
逆に、例外なく処理が完了した場合、この中での変更が適用されます。

終わり