コールバックとは
レコードを保存する一連の流れの中で、ある処理に引っ掛けて別の処理を呼ぶことを言う。
コールバックの使い方
名前を保存する時に文字を置き換える
「名前に”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
こちらの書籍での学習内容をまとめています。
コメント