Eri*_* M. 1 controller ruby-on-rails presenter
我正在使用演示者模式,并且似乎遇到了不一致的类命名冲突。我有一个带有主页方法的页面控制器,我想让该方法使用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)>'
Run Code Online (Sandbox Code Playgroud)
假设问题出在演示者的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)
Run Code Online (Sandbox Code Playgroud)
我刚刚发布了一个类似的问题,然后找出了解决方案:
Pages模块已在ActionController :: Caching中定义。当您使用常量“ Pages”时,Rails会猜测您是在引用此命名空间,但是在其中找不到HomepagePresenter,因此会引发错误。
通过用前缀为显式指定顶级名称空间来修复它::,如下所示:
@presenter = ::Pages::HomepagePresenter.new(current_user)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |