トップ «前の日記(2012/06/06 (水) ) 最新 次の日記(2012/06/08 (金) )» 編集 RSS feed

HsbtDiary


2012/06/07 (木) [長年日記]

[rails] Rails で callback を実行したくない時のアレ

Rails で特定の条件では callback を実行したくない時は ActiveSupport::Callbacks::ClassMethods の skip_callback を使う。ドキュメントに書いてある例以外にも User の中の特定のメソッドの中、具体的には自分自身を複製するような処理で callback を除外したい時は

User.skip_callback :validate, :before, :validate_methods

と書けばよい。ただ、上記のように if を抜くと、skip と言いつつ実際には remove と同様の動きになって callback が常に消えてしまう。なので、実際に使う時は

User.skip_callback :validate, :before, :validate_methods
(snip)
User.set_callback :validate, :before, :validate_methods

というように set_callback を実行して元に戻さなくてはいけない。今日はこの動きにはまったんだけど、上のように skip_callback を使わないとダメないけない状況自体が良くないような気がするなあ。続く。