为什么before_filter不像我期望的那样以restful-authentication工作?

时间:2009-12-24 10:36:44

标签: ruby-on-rails ruby inheritance oop

我的应用程序控制器看起来像这样

class ApplicationController < ActionController::Base
  include AuthenticatedSystem
  helper :all # include all helpers, all the time
  protect_from_forgery # :secret => 'sup3rs3cr3t'
  filter_parameter_logging :password

  # Here's the interesting bit
  before_filter :login_required, :except => [:index, :show, :new]
end

现在我有另一个看起来像这样的控制器

class CompletelySecretController < ApplicationController

  # the other interesting bit
  before_filter :login_required
  def index
    @secrets = Secret.find(:all)
  end
end

我仍然可以看到所有的秘密,尽管我说明所有行动都需要登录

before_filter :login_required

认为子类中的before_filter是否覆盖父类中的before_filter是不是直观的?

1 个答案:

答案 0 :(得分:1)

子类中的

before_filter不会覆盖超类中的相同调用,而是相互堆叠。这是过滤器链的工作方式。如果您想跳过ApplicationController中添加的过滤器,可以使用skip_before_filter方法 - 请参阅“过滤器链跳过”部分here in the filters documentation