为了清晰起见,名称和对象已被简化.基本概念保持不变.
我有三个控制器:dog
、cat
和horse
.
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
的身份验证.这种行为是不可取的.
如何在继承animal
操作的同时,仅跳过dog
的show
操作的身份验证?