正在生产中跳过Rails3过滤器

时间:2012-01-02 12:25:17

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个Rails 3.0.10的奇怪行为。有这个应用程序控制器:

应用程序/控制器/ application_controller.rb

require 'api/api_controller'

# rest not important

应用程序/控制器/ API / api_controller.rb

class Api::ApiController < ActionController::Base
   before_filter :require_user

  def require_user
    @user = User.find(xxx, yyy)
  end
end

然后是这个控制器:

应用程序/控制器/ API / ac_controller.rb

class Api::AcController < Api::ApiController

  before_filter :find_pool, :only => [:add_pool, :remove_pool]

  def add_pool
    # some logic that needs @user to be set
  end

  def remove_pool
    # some logic that needs @user to be set
  end

  def find_pool
    # some logic here
  end

end

我的问题是,当我在生成模式下运行时,不会调用require_user过滤器。当我在开发模式下尝试此操作时,它可以正常工作。

现在,我理解在开发模式下正在重新加载类,但问题是为什么不调用require_user过滤器?

编辑:请注意AC控制器在API控制器之前按字典顺序排列。

2 个答案:

答案 0 :(得分:1)

看起来像所需文件的顺序问题或ApiController被加载两次。在AcController之前和AcController加载之后的一次。这可能会导致find_pool过滤器在require_user之前得到评估。 ApiControllerAcController之后以法律顺序排列。

问题可能是require "api_controller"出现在某个地方引起的 - 它应该由Rails处理,不需要明确地放下。因此,如果有这样一条线,删除它可能有所帮助。

答案 1 :(得分:1)

通常,过滤器调用的方法不应公开。控制器中的公共方法被视为操作。您是否尝试过require_user private方法?