2011-07-30 191 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)