2013-10-23 3 views
1

저는 Michael Hartl의 책에 소개 된 샘플 앱에서 레일즈 애플리케이션을 빌드하고 있습니다. 사용자 가입에 오류 메시지를 표시하기 위해, 나는 공유 디렉토리에있는 부분을 사용하고 있습니다 - 응용 프로그램 /보기/공유/_error_messages.html.erb :레일의 컨트롤 구조 부분

<%if @fact %> 
    <% @data = @fact %> 
<% elsif @user %> 
    <% @data = @user %> 
<% end %> 

<% if @data.errors.any? %> 
    <div id="error_explanation"> 
    <div class="alert alert-error"> 
     The form contains <%= pluralize(@data.errors.count, "error") %>. 
    </div> 
    <ul> 
    <% @data.errors.full_messages.each do |msg| %> 
     <li>* <%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
<% end %> 

원래,이 부분은 단지 같은 시작을 : 내가 다른 페이지에 오류를 표시하려면이 부분 다시 사용하기로 결정했습니다 이후

<% if @user.errors.any? %> 

그러나, 나는 어떤 페이지에서 내가 사용하고 따라 다른 개체 (@user, @fact)를 사용하는 데 그거야. 이것은 쉽게 상단에 IF 문이 -하지만

<%if @fact %> 
    <% @data = @fact %> 
<% elsif @user %> 
    <% @data = @user %> 
<% end %> 

는 구역질 느낀다 추가하여 해결된다. 공유 부분에 대해 이런 종류의 논리를 넣어야하는 컨트롤러가 있습니까? 예를 들어

<% if object.errors.any? %> 
    <div id="error_explanation"> 
    <div class="alert alert-error"> 
     The form contains <%= pluralize(object.errors.count, "error") %>. 
    </div> 
    <ul> 
    <% object.errors.full_messages.each do |msg| %> 
     <li>* <%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
<% end %> 

그리고 당신의 템플릿을 :

답변

3

당신은 부분 대신에 지역 변수를 전달할 수 있습니다

<%= render 'shared/error_messages', object: @user %> 
+0

니스! 매력처럼 작동합니다. 감사 Marek! –

-1
당신은 사용자에 대한 귀하의 컨트롤러에서 부분을 가리 키도록 렌더링 사용할 수

및 것. API documentation on rendering partials을 확인하십시오.

+0

이 링크는 질문에 대한 대답 일지 모르지만 여기에 답변의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. – jbr

+0

팁을 보내 주셔서 감사합니다 ... – mecharaptors

0

마렉의 대답이 아마도 최고입니다. 그러나 확장 성이 없지만 수행 한 작업에 더 가깝습니다.

그냥 교체 :

<%if @fact %> 
    <% @data = @fact %> 
<% elsif @user %> 
    <% @data = @user %> 
<% end %> 

로 :

<% @data = @fact||@user %>