【rails】コールバックを起動する条件を設定したい
コールバックとは?
ある特定の瞬間に呼び出されるメソッドのこと。
例えば、「ユーザー登録する際、createする前にこの処理を実行したい」などという時にコールバックが使われます。
コールバック一覧
オブジェクトの作成 | 概要 |
---|---|
before_validation | バリデーションが行われる直前で実行される |
after_validation | バリデーションが行われた直後に実行される |
before_save | バリデーションに成功し、オブジェクトがDBに保存される直前に実行される |
around_save | バリデーションに成功し、オブジェクトがDBに保存されている最中に実行される |
before_create | バリデーションに成功し、オブジェクトがDBに保存される直前に実行される |
around_create | バリデーションに成功し、オブジェクトがDBに保存されている最中に実行される |
after_create | バリデーションに成功し、オブジェクトがDBに保存された直後に実行される |
after_save | after_create / after_update の直後、データベースへの COMMIT の直前に実行される |
after_commit/after_rollback | after_save の後(データベースに COMMIT された後)に実行される |
オブジェクトの更新 | 概要 |
---|---|
before_validation | バリデーションが行われる直前で実行される |
after_validation | バリデーションが行われた直後に実行される |
before_save | バリデーションに成功し、オブジェクトがDBに保存される直前に実行される |
around_save | バリデーションに成功し、オブジェクトがDBに保存されている最中に実行される |
before_update | DBが更新される直前に実行される |
around_update | DBが更新されている最中に実行される |
after_update | DBが更新された直後に実行される |
after_save | after_create / after_update の直後、データベースへの COMMIT の直前に実行される |
after_commit/after_rollback | after_save の後(データベースに COMMIT された後)に実行される |
オブジェクトのdestroy | 概要 |
---|---|
before_destroy | DBのデータがdestroyされる直前に実行される |
around_destroy | DBのデータがdestroyされている最中に実行される |
after_destroy | DBのデータがdestroyされた直後に実行される |
after_commit/after_rollback | after_save の後(データベースに COMMIT された後)に実行される |
コールバックを起動する際、条件を付けたいときは?
:if
もしくは:unless
オプションをつけることで条件を指定することができます。
class User < ApplicationRecord before_save :downcase_email, if: :email_upcase? end #シンボルを使って実装すると上記のようになる
■参考にした記事
Active Record コールバック - Railsガイド