【Rails】コールバック

Ruby on Railsアイキャッチ画像

コールバックとは

レコードを保存する一連の流れの中で、ある処理に引っ掛けて別の処理を呼ぶことを言う。

コールバックの使い方

名前を保存する時に文字を置き換える

「名前に”Cat”が含まれていた場合、”lovely Cat”という文字に置き換える」

class Book < ApplicationRecord
  before_validation do
    self.name = self.name.gsub(/Cat/) do |matched|
      "Lovely #{matched}"
    end
  end
end

または、メソッドを使って以下のように書くこともできる。

class Book < ApplicationRecord
  before_validation :add_lovely_to_cat
  def add_lovely_to_cat
    self.name = self.name.gsub(/Cat/) do |matched|
      "Lovely #{matched}"
    end
  end
end

削除した際に、削除データの内容をログに書き込む

class Book < ApplicationRecord
  after_destroy do
    Rails.logger.info "Book is deleted: #{self.attributes}"
  end
end

コールバックポイント

コールバックポイントの一覧はこちらを参照

Active Record コールバック - Railsガイド
Active Recordのコールバックについて解説します。
_validation

バリデーション処理の前後

_create _update _destroy

DBへ書き込まれる前後で発火

_save

_createと_update両方に反応する

起動条件の設定

オプションで、コールバック起動の条件を指定することもできる。

以下は :if のオプションを追加し、”価格が5000円以上なら”という条件をつけた例

class Book < ApplicationRecord
  after_destroy :if => :high_price? do
    Rails.logger.warn "Book with high price is deleted: #{self.attributes}"
    Rails.logger.warn "Please check!!"
  end
  def high_price?
    price >= 5000
  end
end

こちらの書籍での学習内容をまとめています。

コメント