LoginSignup
9

More than 5 years have passed since last update.

rails のtransaction処理

Last updated at Posted at 2018-09-02

transaction 処理

不可分の一連の処理作業です。

単一モデルにおける実装

処理に制約をつけて、わざとロールバックさせられる環境を作ります。

User.rb

validates_presence_of :username
#usernameを必須にする

実際のロジックはこんな感じです。

#コンソール
User.transaction do
  user1 = User.new(username: "ttm", age: 25)
  user1.save!
  user2 = User.new(username: nil, age: 26)
  user2.save!
end

saveではダメです。transactionは例外処理に反応してロールバックするので、!をつけて例外を起こさせるようにします。

複数モデルにまたがる実装

新しいモデルと制約を課します。

Book.rb

validates_presence_of :title
#titleを必須にする

ロジックは下の感じ。

#コンソール

ActiveRecord::Base.transaction do
 user = User.new(username: "ttm", age: 25)
 user.save!
 book = Book.new(title: nil)
 book.save!
end

より良いシステムを作るには必要そうなので、是非覚えておきたいです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9