質問

名前とオブジェクトは明瞭のために簡素化されました。基本的な考え方は同じです。

dogcat、および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

showdogアクションでは、私はすべてのユーザー(認証をスキップ)へのオープンアクセスを持っている必要があります。

私はdogに対して個別に認証を書くとしたら、私はこのような何かを行うことができます:

before_filter :authenticate, :except => :show

しかしdogからanimalの継承しているので、私は、コントローラ固有のアクションへのアクセスを持っていません。 :except => :showコントローラでanimalを追加するだけでなく、そのshowdogの、cathorseアクションの認証をスキップするだけではなく。この動作が望まれていません。

まだshowから継承しながら、私は唯一のdoganimalアクションのための認証をスキップすることができますどのように?

役に立ちましたか?

解決

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

で説明しています

あなたの例のdogjustが含まれていなければならないでしょうに。

skip_before_filter :authenticate

ただ、小さなアップデートそのレールを使用して4、それは今skip_before_action :authenticate, :only => :showあるとbefore_filtersは今の代わりにbefore_actionを使用する必要があること。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top