Исключение: обнаружена циклическая зависимость load_missing_constant при автозагрузке константы в Rails

Я использую Rails 4.0.2. Я добавил подкаталоги (с названиями моделей) в каталог Concern:

  • /приложение/модели/концерн/компания/кэш_концерн.рб
  • /приложение/модели/концерн/пользователь/кэш_концерн.рб
  • /app/models/concerns/document/cache_concern.rb

cache_concern.rb в каталоге компании имел следующее содержимое:

module Company::CacheConcern
  included do
    ...
  end
end

В моем классе моделей у меня было:

class Company
    include Company::CacheConcern
...    
end

Все было хорошо, пока я не пошел на производство. Затем я получил следующее исключение:

`load_missing_constant': Обнаружена циклическая зависимость при автозагрузке константы Company::CacheConcern (RuntimeError)

Чтобы решить мою проблему, я изменил пространство имен в своих файлах проблем с Company::CacheConcern на Concerns::Company::CacheConcern. Это позволяет мне загружать приложение в рабочей среде.

Но теперь у меня проблема в среде разработки в файле беспокойства в строке, где я использую класс компании:

NoMethodError (неопределенный метод `current_company' для Concerns::Company:Module):

Так что похоже, что он ищет в каталоге Concern. В производстве все нормально. Чтобы решить эту проблему, я мог бы добавить в соответствующие файлы два двоеточия перед именем класса, чтобы использовать класс из каталога моделей.

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

Спасибо




Ответы (1)


Вы сделали это, я думаю, это неправильно: Чтобы решить мою проблему, я изменил пространство имен в файлах проблем с Company::CacheConcern на Concerns::Company::CacheConcern. Это позволяет мне загружать приложение в рабочей среде.

Вместо этого

Companies::CacheConcern и переименуйте папку в company/cache_concern.rb.

person Taimoor Changaiz    schedule 24.10.2014