2013-02-07 7 views

答えて

22

フィルタをすべてのアクションに適用するには、application_controller.rbに配置します。

+1

:-)幸運を、それがベース上で動作すると、このような

class ApplicationController < ActionController::Base before_filter :set_locale def set_locale I18n.locale = params[:locale] or I18n.default_locale end end 
として、そのすべての派生クラス、

ヨーヨーは何をしたい場合そのフィルタを除いて追加するには?あなたはどのようにすべてのコントローラのすべてのアクションのフィルタを実行したいのですが、ユーザーのコントローラのインデックスアクションを言うのですか? @David Hahn – Cas

+3

あなたは 'skip_before_filter:verify_logged_in、:except => [:index]'をユーザコントローラに追加します。 –

0

ApplicationControllerに配置し、他のすべてのコントローラを継承します。サブコントローラの1つにverify_logged_inを上書きしないと、単純に機能します。

10

アプリケーションコントローラは、他のすべてのクラスの基本クラスです。

あなたがこのクラス内の任意のフィルタを入れた場合は次のように流れが動作します。

は、URLを打つ場合は任意のアクションを持つusersリソースの言う、その後indexアクション言う:

制御が最初Application Controllerに行きます。そこではフィルタをチェックし、見つかった場合はフィルタメソッドを実行し、その後はユーザコントローラのインデックスアクションに移動します。

アプリケーションコントローラ:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :verify_logged_in 

end 

その他のコントローラ:

class UsersController < ApplicationController 

    def index 

    end 

ここでは、他のコントローラは、アプリケーションのコントローラである親コントローラの内容を継承していることがわかり上記のコードで。したがって、アプリケーションコントローラにbefore_filterを置くと、すべてのユーザに対して、ユーザがリクエストごとにログインしているかどうかが確認されます。 (application_controller.rbファイル内の)基底クラスで

+0

そして、私のアプリケーション・コントローラーをそのアクションに使用しないomniauthのようなlibを使用するとどうしますか? – panzi

関連する問題