Skip before_filter in Rails

匿名 (未验证) 提交于 2019-12-03 01:14:02

问题:

Names and objects have been simplified for clarity's sake. The basic concept remains the same.

I have three controllers: dog, cat, and horse. These controllers all inherit from the controller animal. In the controller animal, I have a before filter that authenticates a user as such:

before_filter :authenticate  def authenticate   authenticate_or_request_with_http_basic do |name, password|     name == "foo" && password == "bar"   end end

In the show action of dog, I need to have open access to all users (skip the authentication).

If I were to write the authentication separately for dog, I could do something like this:

before_filter :authenticate, :except => :show

But since dog inherits from animal, I do not have access to the controller-specific actions. Adding :except => :show in the animal controller will not only skip authentication for the show action of dog, but also that of cat and horse. This behaviour is not desired.

How can I skip the authentication only for the show action of dog while still inheriting from animal?

回答1:

class Dog < Animal   skip_before_filter :authenticate, :only => :show end

See ActionController::Filters::ClassMethods for more info on filters and inheritance.



回答2:

The two answers given are half right. In order to avoid making all your dog actions open, you need to qualify the skip_before_filter to only apply to the 'show' action as follows:

class Dog < Animal   skip_before_filter :authenticate, :only => :show end


回答3:

For this you can use skip_before_filter

It's explained in the Rails API

In your example dogjust would have to contain

skip_before_filter :authenticate


回答4:

Just a small update that using rails 4, it is now skip_before_action :authenticate, :only => :show and that before_filters should now use before_action instead.



转载请标明出处:Skip before_filter in Rails
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!