为了简化说明,名称和对象已经被简化。基本概念保持不变。
我有三个控制器:dog
、cat
和horse
。这些控制器都继承自控制器animal
。
在控制器animal
中,我有一个前置过滤器,用于验证用户身份:
before_filter :authenticate
def authenticate
authenticate_or_request_with_http_basic do |name, password|
name == "foo" && password == "bar"
end
end
在dog
的show
动作中,我需要对所有用户开放访问权限(跳过身份验证)。如果我要单独为
dog
编写身份验证,我可以像这样做:before_filter :authenticate, :except => :show
由于dog
继承自animal
,所以我无法访问特定于控制器的操作。在animal
控制器中添加:except => :show
不仅会跳过dog
的show
操作的身份验证,还会跳过cat
和horse
的身份验证。这种行为是不希望的。
如何才能仅对dog
的show
操作跳过身份验证,同时仍然继承自animal
呢?
skip_before_filter
似乎已经被弃用 >> http://apidock.com/rails/ActionController/Filters/ClassMethods/skip_before_filter#1083-deprecated-moved 推荐使用skip_filter
,它将同时调用skip_before_filter
,skip_after_filter
和skip_around_filter
。 - Bachet