Конфликт имен между именем контроллера и пространством имен презентатора

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

uninitialized constant ActionController::Caching::Pages::HomepagePresenter
     # ./app/controllers/pages_controller.rb:3:in `homepage'
     # ./spec/requests/pages_spec.rb:14:in `block (5 levels) in <top (required)>'

Предполагая, что проблема связана с контроллером Pages и пространством имен Pages для докладчика, но похоже, что проблема не возникает при использовании контроллера Homepage и пространства имен Homepage для докладчика.

Я что-то упускаю? Ниже приведены комбинации, которые я пробовал с тем, как ведет себя приложение:

# Ideal, but this breaks with the aforementioned error
presenters/pages/homepage_presenter.rb (class Pages::HomepagePresenter)
controllers/pages_controller.rb (class PagesController)


# Works
presenters/page/homepage_presenter.rb (class Page::HomepagePresenter)
controllers/pages_controller.rb (class PagesController)


# Workes; I would expect this to break
presenters/homepage/index_presenter.rb (class Homepage::IndexPresenter)
controllers/homepage_controller.rb (class HomepageController)

person Eric M.    schedule 30.07.2011    source источник


Ответы (1)


Я только что опубликовал похожий вопрос, а затем нашел решение:

Модуль Pages уже определен в ActionController::Caching. Когда вы используете константу "Pages", rails догадывается, что вы имеете в виду это пространство имен, но не находит в нем HomepagePresenter, поэтому выдает ошибку.

Исправьте это, явно указав пространство имен верхнего уровня, добавив к нему префикс ::, например:

@presenter = ::Pages::HomepagePresenter.new(current_user)
person rickyrickyrice    schedule 28.10.2011