Railsのtransactionの使う方法を現役エンジニアが解説【初心者向け】

初心者向けにRailsのtransactionの使い方について現役エンジニアが解説しています。transaction(トランザクション)とは一連の処理の流れを保証し、データの整合性を守る機能です。Railsではアクセス処理を記述した後に、transactionの成功・失敗の場合の処理を記述します。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Railsのtransactionの使う方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

Rubyについてよく分からないという方は、Rubyとは何なのか解説した記事をみてみましょう。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Railsのtransactionの使い方について詳しく説明していくね!

大石ゆかり

お願いします!

 

transactionとは何か?

Railsのtransactionとは一連の処理の流れを保証し、データの整合性を守る機能のことです。

transactionで守りたい一連の処理は、銀行での出金処理などが例として挙げられます。

通帳差し込み→各種情報入力→出金

このような一連の動作を保証したいときなどに使用します。

 

「守る」処理については以下のように記述します。

  • 発火条件:「transactionで保護されている処理の中で例外処理が発生したとき」
  • 処理内容:例外が発生するまでに行われたすべての処理をロールバックします。

主な機能としてはこの2点になり、複数モデルを同時に更新するような処理にはtransactionがよく使用されます。

transactionの書き方

transactionの基本的なコードは以下のようになります。

モデル.transaction do

テーブルへのアクセス処理
テーブルへのアクセス処理
:
end
トランザクションの処理が成功した場合の処理
rescue => e
トランザクションの処理が失敗した場合の処理

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

transactionを用いたコード例

class UsersController < ActionController::Base
def create
User.transaction do
user = User.new(params[:user])
user.save!
if user.first_name.blank?
raise ActiveRecord::Rollback, "登録に失敗しました。 サポートに問い合わせてください。"
end
item = Item.new( use_id: user.id,
item_name: "美味しいチョコレート",
limit_date: "2020/12/1"
)

item.save!
if item.limit_date < Date.today
raise ActiveRecord::Rollback, "登録に失敗しました。 サポートに問い合わせてください。"
end
end
redirect_to root_url
end
end

個人情報の登録や関連する情報を連続して保存するときなどにtransactionをよく使用します。

 

 

執筆してくれたメンター

水野大輝(みずのたいき)

2014年より、某物流会社のシステム開発担当として入社。

未経験ながら、社内システム保守~新規受注システム開発まで携わり、JavaScript Ruby on Rails PostgreSQLなどの経験を積む。

現在も、開発案件に携わりながら、日々勉強中。

 

大石ゆかり

Railsのtransactionの使い方がよくわかりました!

田島悠介

これからも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に対して、マンツーマンのメンタリングで学習をサポートします。そして、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、参加してみましょう。