【问题标题】:Name conflict between controller name and presenter namespace控制器名称和演示者命名空间之间的名称冲突
【发布时间】:2011-10-16 14:54:58
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails controller presenter


    【解决方案1】:

    我刚刚发了similar question,然后想出了解决办法:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-11
      • 2023-03-11
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2015-10-05
      • 2011-04-21
      • 2013-04-12
      相关资源
      最近更新 更多