Ruby on rails Rails3:警告:引用的顶级常量应用程序控制器

Ruby on rails Rails3:警告:引用的顶级常量应用程序控制器,ruby-on-rails,inheritance,ruby-on-rails-3,Ruby On Rails,Inheritance,Ruby On Rails 3,每次我收到警告: app/controllers/agency/agencies_controller.rb:1: warning: toplevel constant ApplicationController referenced by Agency::ApplicationController “我的机构”\u controller.rb: class Agency::AgenciesController < Agency::ApplicationController def

每次我收到警告:

app/controllers/agency/agencies_controller.rb:1: warning: toplevel constant ApplicationController referenced by Agency::ApplicationController
“我的机构”\u controller.rb:

class Agency::AgenciesController < Agency::ApplicationController

  def index
    ...
  end 

  ...
end
class Agency::AgenciesController
和代理::应用程序控制器:

class Agency::ApplicationController < ApplicationController
  layout 'agency'

  helper_method :current_agency
  private

  def current_agency
    @current_agency ||= current_user.agency 
  end

end
class代理::ApplicationController
rails想从我这里得到什么?有什么问题吗

与其他控制器的情况相同

class Agency::ClientsController < Agency::ApplicationController
  ...
end
classagency::clientscoontroller

没有警告,没有错误

ApplicationController
是Rails在创建所有其他控制器类继承的新项目时为您生成的超类控制器的名称。可能在某个地方存在冲突,因为您使用了相同的名称,即使您将其放在名称空间中


试着给你的
代理::ApplicationController
起一个不同的名字。

在设置
Spork
Watchr
之后,我遇到了类似的问题。在这个过程中,我关闭了类缓存(
config/environments/test.rb
中的
config\u cache\u classes=>false
),以便在spork环境中根据需要重新加载更改。重新启用类缓存
使警告消失。

在我的
管理员
命名空间控制器中运行
Spork
Watchr
时出现类似问题。因此,我通过在
spec\u helper.rb
中的
每个运行块中添加以下代码来解决这个问题:

Dir[File.expand_path("app/controllers/admin/*.rb")].each do |file|
    require file
end 

所有学分都归

我意识到这个问题已经问了将近两年了,但最近我通过stackoverflow帖子偶然发现了这个问题,并想与大家分享一些见解

基本上,如果您的命名空间
代理机构
恰好是
而不是
模块
,您将得到该警告。在我上面粘贴的stackoverflow帖子中,他们有一个
Admin
的模型(
class
),他们的名称空间也是
Admin

对正在发生的事情提供更好的解释


因此,检查您的代码是否没有在某处定义
代理
类。祝你好运。

在我的情况下,这是设计的问题。我有一个设计模型管理员和一个同名路由管理员。将命名空间路由更改为Admins解决了问题。

我的解决方案是添加以下行:

# spec/rails_helper.rb
Dir[File.expand_path("app/controllers/admin/*.rb")].each { |file| require file }

但是为什么Agency::ClientsController没有问题呢?因为
ClientsController
对Rails没有特殊意义。我有一个功能正常的Admin::ApplicationController,它不会带来问题。因此,不需要重命名。Ruby抱怨调用堆栈中的其他地方可能存在歧义。感谢这一点,效果很好,但为了简洁起见,我对其进行了一些修改:Dir[Rails.root.join(“app/controllers/admin/*.rb”)。每个{f |都需要f}在几个小时的撞击之后。。这解决了我的问题。。很好,我注意到了这个警告,很好,我找到了这个答案。。谢谢。