为了清晰起见,名称和对象已被简化.基本概念保持不变.

我有三个控制器:dogcathorse.

before_filter :authenticate

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

dogshow操作中,我需要对所有用户开放访问(跳过身份验证).

如果我为dog单独编写身份验证,我可以这样做:

before_filter :authenticate, :except => :show

但由于dog继承自animal,因此我无法访问特定于控制器的操作.在animal控制器中添加:except => :show不仅会跳过dogshow操作的身份验证,还会跳过cathorse的身份验证.这种行为是不可取的.

如何在继承animal操作的同时,仅跳过dogshow操作的身份验证?

推荐答案

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

有关筛选器和继承的更多信息,请参见ActionController::Filters::ClassMethods.

Ruby-on-rails相关问答推荐

Rails 7:加载所有刺激控制器

Rails 和 jsonb 类型jsonb不存在

Rails Active Record - 从关系中获取 ids 数组

rake assets:precompile try 连接到数据库

无法连接 localhost:3000 ruby​​ on rails in vagrant

Rails: WickedPDF: 分页符

简单表单关联自定义标签名称

Rails 助手应该假设实例变量存在还是应该将它们作为参数接收?

是否可以在 Rails 集成测试或规范中指定用户代理?

在两个 DateTime 之间迭代,步长为一小时

Rspec/Capybara 正在加载,循环要求被认为是有害的

Rails:使用 link_to 创建不带 href 的链接

默认呈现 JSON 而不是 HTML?

Rails Associations - has_many => :through - 但相同的模型

在 Devise on Rails beta 3 中创建管理员用户

Heroku - 在浏览器中显示当前提交的哈希

设计:为什么我的注销链接不起作用?

Rails:在 link_to 中保留 GET 查询字符串参数

在 GIT 中处理 Rails db/schema.rb 文件的正确方法是什么?

如何从 ApplicationHelper 调用 ApplicationController 方法