每次我收到警告:
app/controllers/agency/agencies_controller.rb:1: warning: toplevel constant ApplicationController referenced by Agency::ApplicationController
我的agencies_controller.rb:
class Agency::AgenciesController < Agency::ApplicationController
def index
...
end
...
end
和Agency :: ApplicationController:
class Agency::ApplicationController < ApplicationController
layout 'agency'
helper_method :current_agency
private
def current_agency
@current_agency ||= current_user.agency
end
end
铁轨对我有什么要求?有什么麻烦?
与另一个控制器相同的情况
class Agency::ClientsController < Agency::ApplicationController
...
end
没有警告,没有错误......
答案 0 :(得分:12)
我意识到这个问题已经差不多两年了,但我最近通过another stackoverflow帖子偶然发现了这个问题,并希望分享一些见解。
基本上,如果您的命名空间Agency
恰好是class
而不是module
,那么您将收到该警告。在我上面粘贴的stackoverflow帖子中,他们有class
的模型(Admin
),其名称空间也是Admin
。
This可以更好地解释正在发生的事情。
因此,请检查您的代码是否未在某处定义Agency
类。祝你好运。
答案 1 :(得分:7)
我在Spork
命名空间控制器中运行Watchr
和Admin
时出现类似问题。所以我通过在each_run
中的spec_helper.rb
块中添加以下代码来解决这个问题:
Dir[File.expand_path("app/controllers/admin/*.rb")].each do |file|
require file
end
所有积分都转到guy from this thread
答案 2 :(得分:5)
ApplicationController
是Rails在您创建所有其他控制器类继承的新项目时为您生成的超类控制器的名称。某处可能存在冲突,因为您使用了相同的名称,即使您将其放在命名空间内也是如此。
尝试为Agency::ApplicationController
提供不同的名称。
答案 3 :(得分:2)
设置Spork
和Watchr
后,我遇到了类似的问题。在此过程中,我关闭了类缓存(config_cache_classes => false
中的config/environments/test.rb
),以便在spork环境中根据需要重新加载更改。转动类缓存back on
会使警告消失。
答案 4 :(得分:2)
就我而言,这是Devise的问题。我有一个设计模型Admin和命名空间路由Admin。将命名空间路由更改为Admins解决了问题。
答案 5 :(得分:0)
我的解决方案是添加以下行:
# spec/rails_helper.rb
Dir[File.expand_path("app/controllers/admin/*.rb")].each { |file| require file }