Railsの中にbefore_filterをスキップ
-
24-09-2019 - |
質問
名前とオブジェクトは明瞭のために簡素化されました。基本的な考え方は同じです。
dog
、cat
、およびhorse
:私は3つのコントローラを持っています。
これらのコントローラは、すべてのコントローラanimal
から継承します。
コントローラanimal
において、Iのようなユーザを認証する前にフィルタを有する
before_filter :authenticate
def authenticate
authenticate_or_request_with_http_basic do |name, password|
name == "foo" && password == "bar"
end
end
show
のdog
アクションでは、私はすべてのユーザー(認証をスキップ)へのオープンアクセスを持っている必要があります。
私はdog
に対して個別に認証を書くとしたら、私はこのような何かを行うことができます:
before_filter :authenticate, :except => :show
しかしdog
からanimal
の継承しているので、私は、コントローラ固有のアクションへのアクセスを持っていません。 :except => :show
コントローラでanimal
を追加するだけでなく、そのshow
とdog
の、cat
のhorse
アクションの認証をスキップするだけではなく。この動作が望まれていません。
まだshow
から継承しながら、私は唯一のdog
のanimal
アクションのための認証をスキップすることができますどのように?
解決
class Dog < Animal
skip_before_filter :authenticate, :only => :show
end
を参照してください。 ActionController ::フィルタ::クラスメソッドは、詳細はをフィルタや相続ます。
他のヒント
与えられた2つの答えは半分正しいです。次のようにすべてのあなたの犬の行動が開くことを避けるために、あなただけの「ショー」アクションに適用するskip_before_filterを修飾する必要があります:
class Dog < Animal
skip_before_filter :authenticate, :only => :show
end
このために使用できるskip_before_filter
これは RailsのAPI の
で説明していますあなたの例のdog
justが含まれていなければならないでしょうに。
skip_before_filter :authenticate
ただ、小さなアップデートそのレールを使用して4、それは今skip_before_action :authenticate, :only => :show
あるとbefore_filtersは今の代わりにbefore_action
を使用する必要があること。