Rails3:警告:toplevel引用的常量ApplicationController

pet*_*hka 9 inheritance ruby-on-rails ruby-on-rails-3

每次我收到警告:

app/controllers/agency/agencies_controller.rb:1: warning: toplevel constant ApplicationController referenced by Agency::ApplicationController
Run Code Online (Sandbox Code Playgroud)

我的agencies_controller.rb:

class Agency::AgenciesController < Agency::ApplicationController

  def index
    ...
  end 

  ...
end
Run Code Online (Sandbox Code Playgroud)

和Agency :: ApplicationController:

class Agency::ApplicationController < ApplicationController
  layout 'agency'

  helper_method :current_agency
  private

  def current_agency
    @current_agency ||= current_user.agency 
  end

end
Run Code Online (Sandbox Code Playgroud)

铁轨对我有什么要求?有什么麻烦?

与另一个控制器相同的情况

class Agency::ClientsController < Agency::ApplicationController
  ...
end
Run Code Online (Sandbox Code Playgroud)

没有警告,没有错误......

Bar*_*cha 12

我意识到这个问题已经差不多两年了,但我最近在另一篇 stackoverflow帖子中偶然发现了这个问题,并希望分享一些见解.

基本上,如果你的命名空间Agency恰好是一个class而不是一个module,你就会得到那个警告.在上面粘贴的stackoverflow帖子中,他们有一个model(class),Admin并且他们的命名空间也是Admin.

为发生的事情提供了更好的解释.

因此,请检查您的代码是否未在Agency某处定义类.祝好运.


Vad*_*mel 7

我跑了类似的问题Spork,并Watchr在我的Admin命名空间的控制器.所以我通过在each_run块中添加以下代码来解决这个问题spec_helper.rb:

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

所有积分都来自这个帖子


Joh*_*ley 5

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

尝试给你Agency::ApplicationController一个不同的名字.