2012-02-20 10 views
27

コントローラ "abc"を "除外"したいときは、before_filterの構文は何ですか?before_filterの構文コントローラ "abc"を除きたい場合

例、application_controllerで私が言いたい場合:

before_filter :login_required :except => ["-name of controller-"] 

背景 - ただ、実際にユーザーが認証取得ハンドルコントローラを除く全アプリ間で基本認証を望んでいた....

答えて

55

あなたはbefore_filterが実行すべきではないコントローラに以下の行を置くことができます。

skip_before_filter :login_required 

することができますも、 before_filter:only:exceptオプションで無視された方法をspecifiy:

skip_before_filter :login_required, :only => [:login] 

here


編集:before_filter構文は

before_filter :login_required, :except => ["-name of the action-"] 

あるRailsの4、before_filterではbefore_actionでエイリアスされ、そしてskip_before_filterskip_before_action

3

コントローラー名を使用する代わりに、コントローラーがそのフィルターを親から継承することを利用することをお勧めします。それでは、私がお勧めすることは、このようなものです:

# app/controllers/application_controller.rb 
class ApplicationController 
    # no filters here 
end 

# app/controllers/authenticated_controller.rb 
class AuthenticatedController < ApplicationController 
    before_filter :login_required 
end 

# app/controllers/some_other_controller.rb 
class SomeOtherController < AuthenticatedController 
    # inherits the before_filter from AuthenticatedController 
    # use this for most of your other controllers 
end 

# app/controllers/unauthenticated_controller.rb 
class UnauthenticatedController < ApplicationController 
    # no filters, since this inherits directly from ApplicationController 
    # use this for the controller that you don't want to check login on 
end 

これは、コントローラがそれらはむしろ名前の(おそらく脆性)のリストを持つよりも、ログインを確認することになっているかどうかを知ること。

関連する問題