Ruby on rails 在Rails中过滤之前跳过
为了清晰起见,名称和对象已简化。基本概念保持不变 我有三个控制器:Ruby on rails 在Rails中过滤之前跳过,ruby-on-rails,inheritance,before-filter,Ruby On Rails,Inheritance,Before Filter,为了清晰起见,名称和对象已简化。基本概念保持不变 我有三个控制器:狗,猫,和马。 这些控制器都继承自控制器动物。 在控制器animal中,我有一个对用户进行身份验证的before过滤器: before_filter :authenticate def authenticate authenticate_or_request_with_http_basic do |name, password| name == "foo" && password == "bar"
狗
,猫
,和马
。
这些控制器都继承自控制器动物。
在控制器animal
中,我有一个对用户进行身份验证的before过滤器:
before_filter :authenticate
def authenticate
authenticate_or_request_with_http_basic do |name, password|
name == "foo" && password == "bar"
end
end
在show
的dog
操作中,我需要对所有用户开放访问(跳过身份验证)
如果我要为狗
单独编写身份验证,我可以这样做:
before_filter :authenticate, :except => :show
但是由于狗
继承自动物
,因此我无法访问控制器特定的操作。在动物
控制器中添加:except=>:show
不仅会跳过狗
的show
动作的身份验证,还会跳过猫
和马
的身份验证。这种行为是不可取的
如何仅跳过显示狗的动作的身份验证,而仍从动物继承
这在报告中有解释
在您的示例中,dog
必须包含
skip_before_filter :authenticate
class狗:显示
结束
有关筛选器和继承的更多信息,请参阅。给出的两个答案是正确的一半。为了避免打开所有狗狗动作,您需要将“先跳过后跳过”过滤器限定为仅适用于“显示”动作,如下所示:
class Dog < Animal
skip_before_filter :authenticate, :only => :show
end
class狗:显示
结束
只是一个小的更新,使用rails 4,它现在是在操作之前跳过:验证,:only=>:show
和before\u filter现在应该改为使用before\u action
。before\u filter
似乎被弃用>>他们建议一起使用skip\u filter
调用before\u filter
,跳过\u filter
和跳过\u filter
。否不是。。他们只是将方法移动到另一个类,这应该是一个注释。
class Dog < Animal
skip_before_filter :authenticate, :only => :show
end