1

我正在使用演示者模式,并且似乎遇到了不一致的类命名冲突。我有一个带有主页方法的页面控制器,我希望该方法使用 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)
4

1 回答 1

6

我刚刚发布了一个类似的问题,然后想出了解决方案:

Pages 模块已经在 ActionController::Caching 中定义。当您使用常量“Pages”时,rails 会猜测您指的是这个命名空间,但在其中没有找到 HomepagePresenter,因此会引发错误。

通过使用前缀显式指定顶级命名空间来修复它::,如下所示:

@presenter = ::Pages::HomepagePresenter.new(current_user)
于 2011-10-28T06:56:02.280 回答