2011-07-30 53 views
0

我正在使用演示者模式,并且看起来会遇到不一致的类命名冲突。我有一个主页方法的页面控制器,我想有这个方法使用页面:: 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)>' 

假定问题是与网页控制器和网页为演示者命名空间,但使用演示者的首页控制器和主页名称空间似乎没有问题。

我错过了什么吗?下面是我用的应用程序的行为试图组合:

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

回答

3

我只是贴了similar question,然后想出解决办法:

该页面模块的ActionController已定义::缓存。当你使用常量“Pages”时,rails会猜测你指向这个名字空间,但是在它中找不到HomepagePresenter,所以它会抛出一个错误。

修复它由前缀它与::明确指定了顶级命名空间,如下所示:

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