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

문제를 가정하면 페이지 컨트롤러 및 페이지 함께 발표자의 네임 스페이스이지만 발표자의 Homepage 컨트롤러 및 Homepage 네임 스페이스를 사용할 때 문제가없는 것 같습니다.

내가 누락 된 항목이 있습니까? 다음은 I 앱이 작동하는 방법을 함께 시도했다 조합은 다음과 같습니다

# 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"를 사용하면 레일스는이 네임 스페이스를 참조하고 있지만 HomepagePresenter가 없으므로 오류가 발생합니다. 명시 적으로 다음과 같이 ::를 앞에하여 최상위 네임 스페이스를 지정하여

수정을 :

@presenter = ::Pages::HomepagePresenter.new(current_user) 
관련 문제