【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

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

コメント

タイトルとURLをコピーしました