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}在几个小时的撞击之后。。这解决了我的问题。。很好,我注意到了这个警告,很好,我找到了这个答案。。谢谢。