我有一个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控制器之前按字典顺序排列。
答案 0 :(得分:1)
看起来像所需文件的顺序问题或ApiController
被加载两次。在AcController
之前和AcController
加载之后的一次。这可能会导致find_pool
过滤器在require_user
之前得到评估。 ApiController
在AcController
之后以法律顺序排列。
问题可能是require "api_controller"
出现在某个地方引起的 - 它应该由Rails处理,不需要明确地放下。因此,如果有这样一条线,删除它可能有所帮助。
答案 1 :(得分:1)
通常,过滤器调用的方法不应公开。控制器中的公共方法被视为操作。您是否尝试过require_user
private
方法?