Конфликт имен между именем контроллера и пространством имен докладчика - PullRequest
0 голосов
/ 30 июля 2011

Я использую шаблон презентатора и, похоже, сталкиваюсь с противоречивыми конфликтами именования классов.У меня есть контроллер страниц с методом домашней страницы, и я хотел бы, чтобы этот метод использовал класс 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 для докладчика проблем не возникает.

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

# 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)

1 Ответ

4 голосов
/ 28 октября 2011

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

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

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

@presenter = ::Pages::HomepagePresenter.new(current_user)
...