2011-09-22 2 views

답변

22

ActionView::Helpers::CaptureHelper을 조사하십시오. 당신은 당신의보기에이 같은 작업을 수행 할 수 있습니다

<% content_for :sidebar do %> 
    <!-- sidebar content specific to this page --> 
<% end %> 

이것은 content_for 블록 내부의 템플릿을 실행되지만 출력은 일반 템플릿 yield 버퍼의 일환으로, 그것은 나중에 별도의 버퍼에 저장됩니다하지 않습니다 . 그런 다음 나중에, 레이아웃에 포함, 당신은 출력 내용 yield :content_name을 사용할 수 있습니다 : 당신이 다른보기에 대해 서로 다른 yield들 수 있습니다 그래서 의미에서

<div class="content"> 
    <%= yield %> 
</div> 

<div class="sidebar"> 
    <%= yield :sidebar %> 
</div> 

을, 당신은 단지와 다른 내용에 이름을 지정해야 보기에서 content_for을 입력하고 레이아웃에서 같은 이름으로 만듭니다.

다른 장소에서 다른보기를 원할 때 고려하십시오. panel1, panel2 및 panel3의 세 개의 패널이 있다고 가정 해 보겠습니다. 당신은 당신의 레이아웃에서이 작업을 수행 할 수 있습니다 : 당신은 심지어 당신이 원하지 않는 경우 일반 <%= yield %>을 포함 할 필요가 없습니다

<div id="panel1"><%= yield :panel1 %></div> 
<div id="panel2"><%= yield :panel2 %></div> 
<div id="panel3"><%= yield :panel3 %></div> 

. 그런 다음보기에서 전체보기를 둘러싼 content_for과 함께 콘텐츠를 표시 할 패널을 선택할 수 있습니다. 예를 들어,보기 중 하나는 다음과 같이 변경 될 수 있습니다

<% content_for :panel2 do %> 
    <!-- Your View --> 
<% end %> 

가 또 다른 하나 같이, 패널 3 구성 될 수 패널 2에 표시하려면 :

<% content_for :panel3 do %> 
    <!-- Your View --> 
<% end %> 
+0

대부분의 Egbert 페이지를 사용자 정의하려는 페이지 제목에는 적합하지만 모든 페이지에서 지정해야합니다. 따라서 인증 페이지에만 사이드 바를 숨기는 것과 같은 일에는 좋지 않습니다. – ahnbizcad

1

예, 복수 <%= yield %> 태그를 사용할 수 있습니다. 기준보기에서 각 yield 태그와 같은 이름을 지정할 수 있습니다.

<%= yield :footer %>

<%= yield :head %>

는 그런 다음 개별 뷰에 content_for 태그를 사용합니다.

<% content_for :head do %> 
    <%= stylesheet_link_tag 'custom' %> 
<% end %> 
0
당신은 수율을 사용할 수 있습니다

및 콘텐츠에 대한 :

For example: 
<%= yield :head %> 
<% content_for :head do %> 
    <title>A simple page</title> 
<% end %>