10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

継承されたフィルターを、特定のコントローラーだけ無効化

Last updated at Posted at 2014-09-10

#Rubyで特定の子コントローラだけで無効化したい

個人用メモ
親コントローラー設定したフィルターを、子コントローラーでは無効化したい時の書き方

skip_before_filter / skip_after_filter を使うのが一般的なようです

##特定のフィルターのみ無効化

###skip_before_filterのonlyで指定

  • 親コントローラー
class ApplicationController < ActionController::Base
  before_filter :test_filter

  private

  def test1 # test_filterが実行される
    …
  end
end
  • 子コントローラー

オプションでonlyを指定しているので、test2だけ無効化される

class ChildController < ApplicationController
  skip_before_filter :test_filter,
                     :only => :test2

  def test2 # test_filterが実行されない
    …
  end

  def test3  # test_filterが実行される
    …
  end
end

##特定のフィルター以外を無効化

###skip_before_filterのexceptで指定

class ChildController < ApplicationController
  skip_before_filter :test_filter,
                     :except => :test2

  def test2 # test_filterが実行される
    …
  end

  def test3  # test_filterが実行されない
    …
  end

  def test4  # test_filterが実行されない
    …
  end
end

備考

###after_filterの場合

skip_after_filter で skip_before_filterと同じようにすればOK

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?