Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Rails】コードバックについて

 
コールバックとは、
あとで読んで欲しい処理をあらかじめ指定しておく仕組みを指すプログラミング言語です。
 
ちょっと後で振り返るかもしれないぞ!ってところに付箋を貼ってみる感覚です🔖
 
登録や削除の大きな変更の前後にこのコールバックを挟むことが多いです。
 
 
 

コードバックを挟むタイミング

 
・検証・登録・更新・削除
 
の前(before)と後(after)途中(around)の3つのタイミングで書きます。
 
「いつでも書けるやないかーい」って感じですが、毎度コードバックを挟めるわけではないようです。
 

コードバックの登録

 
コードバックを利用するためには、まず登録する必要があります。
 
コールバックはprivateメソッドとして宣言するのが好ましいです。もし、publicな状態のままだと、このメソッドがモデルの外から呼び出され、オブジェクトのカプセル化の原則に違反する可能性があります。
 
 
 

利用可能なコードバックの例

 
コードバックの処理:代表的な使い方という形で記述します。
 
before_validation:検証前の値の正規化
after_valiidation :検証結果(エラーメッセージ)の加工
before_save  :オブジェクトの作成
before_create   :オブジェクトの作成     
bbefore_update :オブジェクトの作成
after_save :オブジェクトの更新
after_create :オブジェクトの更新
after_update :オブジェクトの更新
before_destroy:削除してOKかを確認しダメなら例外を出すなどして防ぐ
after_destroy:そのモデルの削除に老いじて他のモデルの状態を変えるといった連動した挙動を実現する
 

コードバックの実行

  • create
  • create!
  • destroy
  • destroy!
  • destroy_all
  • save
  • save!
  • save(validate: false)
  • toggle!
  • touch
  • update_attribute
  • update
  • update!
  • valid?
 
これらのメソッドが使われます。
 

コールバックの実行

以下のメソッドはコールバックをトリガします。
 
  • create
  • create!
  • destroy
  • destroy!
  • destroy_all
  • save
  • save!
  • save(validate: false)
  • toggle!
  • touch
  • update_attribute
  • update
  • update!
  • valid?
  •  
また、after_findコールバックは以下のfinderメソッドを実行すると呼び出されます。
 
  • all
  • first
  • find
  • find_by
  • find_by_*
  • find_by_*!
  • find_by_sql
  • last
 
参照Railsガイドv6-1
 

コードバックの停止

 
モデルに新しく登録すると、コードバックは実行キューに入ります。
 
throw :abort
 
こうすることによってコールバックを停止することが出来ます。