Railsで一時的にbefore_saveをskip
Rails3.2で確認 昨日の Railsで一時的にupdated_atの更新をskip に続いて、 今回は、一時的にbefore_save等のcallbackをskipする方法です。
モデルのskip_callbackメソッドを使用することでskip可能です。
元に戻すにはset_callbackメソッドを使用します。
# サンプル
class User < ActiveRecord::Base
before_save :hoge
def hoge
# save前にしたい処理
end
end
上記のようなUserモデルがあった場合に
# before_save :hogeをskip
User.skip_callback(:save, :before, :hoge)
# 何かしたい処理を記述
user = User.find(1)
user.name = 'sample'
user.save # hogeは実行されない
# before_save :hogeを有効に
User.set_callback(:save, :before, :hoge)
同様に、after_saveをskipしたり有効化したい場合は
# after_save :fugaをskip
User.skip_callback(:save, :after, :fuga)
# after_save :fugaを有効に
User.set_callback(:save, :after, :fuga)
とすればできます。