Rails3: предупреждение: верхний уровень константы ApplicationController, на который ссылается - PullRequest
9 голосов
/ 04 июля 2010

Каждый раз, когда я получаю предупреждение:

app/controllers/agency/agencies_controller.rb:1: warning: toplevel constant ApplicationController referenced by Agency::ApplicationController

Мои агентства_controller.rb:

class Agency::AgenciesController < Agency::ApplicationController

  def index
    ...
  end 

  ...
end

А, Агентство :: 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

И без предупреждений, без ошибок ...

Ответы [ 6 ]

12 голосов
/ 05 июня 2012

Я понимаю, что этому вопросу уже почти два года, но недавно я наткнулся на этот вопрос через еще одну публикацию stackoverflow и хотел поделиться некоторой информацией.

По сути, если ваше пространство имен Agency окажется class вместо module, вы получите это предупреждение. В сообщении stackoverflow, которое я вставил выше, у них была модель (class) Admin, и их пространство имен также было Admin.

Этот дает лучшее объяснение того, что происходит.

Поэтому проверьте, не определяет ли ваш код класс Agency. Удачи.

7 голосов
/ 28 сентября 2011

У меня были похожие проблемы при работе Spork и Watchr в моих Admin контроллерах пространства имен. Поэтому я исправил это, добавив следующий код в блок each_run в spec_helper.rb:

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

Все кредиты идут парню из этой темы

5 голосов
/ 04 июля 2010

ApplicationController - это имя контроллера суперкласса, которое Rails генерирует для вас, когда вы создаете новый проект, от которого наследуются все ваши другие классы контроллеров.Возможно, где-то конфликт, потому что вы использовали одно и то же имя, даже если вы поместили его в пространство имен.

Попробуйте дать вашему Agency::ApplicationController другое имя.

2 голосов
/ 09 августа 2012

В моем случае это была проблема с Devise. У меня была разработанная модель Admin и администратор пространства имен. Изменение маршрута с именами для администраторов решило проблему.

2 голосов
/ 01 сентября 2011

У меня были похожие проблемы после настройки Spork и Watchr.В процессе я отключил кэширование классов (config_cache_classes => false в config/environments/test.rb), чтобы изменения могли быть перезагружены при необходимости в среде spork.Включение кэширования классов back on заставило предупреждения исчезнуть.

0 голосов
/ 11 марта 2015

Решением для меня было добавление этой строки:

# spec/rails_helper.rb
Dir[File.expand_path("app/controllers/admin/*.rb")].each { |file| require file }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...