対象読書
コールバックって何?という方
コールバックとは
コールバックとは、オブジェクトのライフサイクル期間における特定の瞬間に呼び出されるメソッドのことです。コールバックを利用することで、Active Recordオブジェクトが作成/保存/更新/削除/検証/データベースからの読み込み、などのイベント発生時に常に実行されるコードを書くことができます。
個人の解釈としては、例えば、ある商品に対してコメントする際に、createアクションが動くけど、このcreateアクションの前後で何か一手間加えたいな、って思った時にこの”前後”の一手間のこと
利用可能なコールバック
Active Recordで利用可能なコールバックの一覧です。
オブジェクトの作成
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
after_commit/after_rollback
オブジェクトの更新
before_validation
after_validation
before_save
around_save
before_update
around_update
after_update
after_save
after_commit/after_rollback
オブジェクトのdestroy
before_destroy
around_destroy
after_destroy
after_commit/after_rollback
コールバックの実行(trigger)
create
destroy
save
update
valid? など
例えば
実用的でないですが、例として
ユーザーが投稿(comment)を行ったら、commentsテーブルのtextカラムに保存されるデータの最後に「!!」を自動で追加するというコードは以下の通り。
class Post < ApplicationRecord
before_create :change_comment
def change_comment
self.text = text + "!!"
end
end
comments_controller.rbでのcreateアクション内で、createトリガーが発火した時にchange_commentのコールバックが呼ばれ、結果として"!!" が付与されてDBに登録(INSERT)される仕組みです。
(self.textとしているのは、セッターメソッドだからです。)