1. kamohicokamo

    Posted

    kamohicokamo
Changes in title
+RailsのTransactions 初心者→中級者へのSTEP16/25
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,50 @@
+#RailsのTransactions
+##はじめに
+やっぱり今日はTransactionについて書きます。キャッシュはまた今度にします。
+
+
+##トランザクションとは
+簡単にいうと、複数のSQL文の集まりです。`transaction`は訳せば取引です。webアプリケーションでは例えばユーザ間での何かしらのやりとり、取引が起きた時、双方のデータを更新すべき時があります。
+例えば、Aさんの口座からBさんの口座に100円渡す時、Aさんの口座情報と、Bさんの口座情報を両方更新されなければなりません。片方だけ更新が成功されすることは起きてはなりません。片方が失敗したなら、もう片方も更新されてはなりません。この更新がする前に戻るべきです。
+そんなまとめて処理されるべき更新のSQL文の塊をトランザクションと言います。
+
+##Railsでどう実装するのか
+実装の仕方はシンプルで、下記のようにブロック内にまとめたい処理を書いてくだけです。
+
+```rb
+ActiveRecord::Base.transaction do
+ #まとめたい処理たち
+end
+```
+
+##サンプル例
+2つのユーザーが同時に保存されなけらばいけない場合。
+
+```rb
+ def create
+ User.transaction do
+ user1 = User.new(:name => 'tarou')
+ user1.save!
+ user2 = User.new(:name => '')
+ user2.save!
+ end
+ p '更新に成功しました'
+ rescue
+ p 'ロールバック'
+ end
+```
+
+処理が失敗した場合、`save!`でないと例外を吐いてくれないのでロールバックされません、注意です。例外を吐くメソッドを使用しましょう。
+これでuser1,user2の保存に成功しないと、この処理はロールバックされます。
+
+
+##まとめ
+今日は軽くにして明日このtransactionmを深く掘り下げていきたいです。
+
+##参考にしたの
+
+Railsのデータロック
+https://qiita.com/merrill/items/d9d41d64df292bd6432a
+
+Active Record Transactions
+https://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html