Rails:モデルのコールバック(before_filter/before_action)などをスキップする

Published on:
Last updated:

This post is also available in: 日本語 (Japanese)

Railsで開発していて、例えば、ユーザーモデル(User Model)で コールバック(例として、before_create) を利用している際に、seedファイル(もしくはその他のモデル)などにて処理をスキップしたい場合、以下のようなコードを付け加えると幸せになれるかもって話です。
db:seed の初期データを挿入する時や特定のモデルにて処理をスキップさせたい時などに便利です。

例として、ユーザーモデルにおいて before_create を利用している状態とします。

#User Model
class User < ActiveRecord::Base
  before_create :set_something

  private
  def set_something
    #something
  end
end

で、before_create をスキップするコードを seed.rb などに追加します。

#seed.rb
User.skip_callback(:create, :before, :set_something)

また、他の例として before_save を利用している場合には、以下のようなコードになります。

#seed.rb
User.skip_callback(:save, :before, :set_something)

About
Kuniyoshi Takemoto is the founder of Amelt.net LLC, and editor of this blog(www.amelt.net).Learn more and follow me on LinkedIn.