2013-12-10 7 views
0

static_pages 뷰를 정리하기 위해 발표자 (여기에 보이는 것처럼 : http://railscasts.com/episodes/287-presenters-from-scratch?view=asciicast)를 사용하고 싶습니다.하지만 그의 메소드는 static_pages가 사용하지 않는 기본 모델에 의존하는 것 같습니다. 있다. 정적 홈 페이지에이 방법을 사용할 수 있습니까? (잘 작동하고 는 해당 모델을 가지고 않음)관련 모델이없는 발표자 (Ryan Bates의 스타일)

내 사용자 설정은 다음과 같습니다

Presenter:

class UserPresenter < BasePresenter 
    presents :user 
    def h 
     @template 
    end 

    def admin_text 
     if user.admin? 
     'This is an admin' 
     else 
     'This is not an admin' 
     end 
    end 
end 

Users/Show:

<% present @user do |user_presenter| %> 
    <div class="row"> 
     <dl> 
      <dt>Username:</dt> 
      <dt><%= @user.username %></dt> 
      <dt>Email:</dt> 
      <dt><%= @user.email %></dt> 
      <dt><%= user_presenter.admin_text %> 
     </dl> 
    </div> 
<% end %> 

나는를 사용하고 싶습니다 유사한 구조를 렌더링 내 _header 부분 정리 application.html.erb에서의 일부는 다음과 같습니다

from _header.html.erb:

<% if current_user && current_user.admin? %> 
    <li><a href="#">All Notes</a></li> 
<% end %> 

가 어떻게 뷰에서이 논리를 이동하는 발표자를 사용하고,이 같은 뷰 쇼 뭔가 할 수 있습니다 :

static_presenter.admin_all_notes 

home.html.erb에 필요한보기 코드를 제시 하시겠습니까?

가능한 최선의 방법으로이 질문을 던지 겠지만 Ryan Bates와 같은 발표자가 해당 모델이없는 static_pages 뷰를 정리하는 데 사용하는 것이 목표입니다.

감사합니다.

편집 :

내가 정적 페이지를 포장하는 방법에 대해 구체적으로 혼란 스러워요 (예 home.html.erb을) 어떤이 블록에 전달하고,이 다음과 같은 방법 발표자 클래스의 방법을 참조 정적 페이지에서.

답변

1

동일한 접근법을 사용할 수 있습니다. 발표자의 이름 (예 : static_presenter)을 선택하기 만하면 정적 또는 글로벌 정보를 제공하기 때문에 모델 인스턴스를 초기화에 전달하지 않아도됩니다. 그렇지 않으면 접근법은 동일합니다.

그래서 현재의 클래스, 당신이 할 수 생각 :

당신은 같은 것을 가질 수 부분 헤더 내에서 다음
class StaticPagesPresenter 

    def initialize(template) 
    @template = template 
    yield self if block_given? 
    end 

    def h 
    @template 
    end 

    def admin_notes 
    if h.current_user && h.current_user.admin? 
     '<li><a href="#">All Notes</a></li>' 
    end 
    end 

end 

:

<% StaticPagesPresenter.new(self) do |presenter| %> 
<% presenter.admin_notes %> 
<% end %> 

내가 레일이 있다고 믿고있어를 도우미는 현재 admin_notes에있는 HTML의 대안으로 사용할 수 있으며 을 참조하려면 h.이 필요한지 잘 모르겠습니다.

+0

업데이트 됨, 감사합니다. – jackerman09