ActiveModelでコールバックを使ったときに少し調べたことを、まとめてみました。
確認したバージョン
- rails 4.2.3
after_create, before_createしたいとき
rails guidesにも書いてありました。
http://railsguides.jp/active_model_basics.html#callbacks%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB
define_model_callbacks
でcallbackさせたいアクションを定義して、かつそのアクションのなかでrun_callbacks
を書いてやる必要があるらしい。save
、update
、destroy
もこれでいけるみたい。
class UserRegistraionForm
include ActiveModel::Model
define_model_callbacks :create
before_create :some_action
def create
run_callbacks :create do
# saveする動作を書く
end
end
def some_action
# callbackとして実行させたいこと
end
end
after_validation, before_validationしたいとき
こっちは調べてもなかなか出てこなかった…
こちらは上記の方法ではだめで別のモジュールをincludeしてやる必要が有りました。****_validation
の場合は、define_model_callbacks
も不要みたいです。
class UserLoginForm
include ActiveModel::Model
include ActiveModel::Validations::Callbacks
before_validation :some_action
def some_action
# callbackとして実行させたいこと
end
end
小一時間ググりましたが、どっちもちゃんと公式を見たら書いてあった。ちゃんと調べようと思いました。