WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

ActiveRecord でバリデーションやコールバックをスキップする

      2016/01/19

バリデーションをスキップする

saveメソッド実行時に :validate => false を指定するとバリデーションをスキップできる。

object_of_model.save(:validate => false)

コールバックをスキップする

コールバックをスキップするときはskip_callbackメソッドにコールバックをスキップしたいイベントを与える。

class Model < ActiveRecord::Base
   skip_callback :save, :before, :before_meth
   〜
   〜
end
&#91;/ruby&#93;

<p>
以下のように、クラスメソッドで一時的に無効にすることもできる。
</p>

[ruby]
def hoge
  〜
  Model.skip_callback(:update, :update_method)
  〜
end

再有効化する場合はset_callbackメソッドを利用する。
引数はskip_callbackと同じだったと思う。
詳しい使い方はドキュメントを参照のこと。

http://api.rubyonrails.org/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-skip_callback

基本的には処理が終わってskip_callbackがもう必要なくなったらset_callbackで元に戻したほうがよさそう。


2012/12/26 追記:

reset_callbacksで指定したイベントのすべてのコールバックをスキップすることもできる。

Model.reset_callbacks(:save)

skip_callback
reset_callbacks

 - Ruby on Rails , , ,