2011-09-22 38 views

回答

22

調查ActionView::Helpers::CaptureHelper。你可以做這樣的事情在你的看法:

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

這將運行content_for塊內模板,但不會輸出作爲常規模板yield緩衝的一部分,它會被存儲在一個單獨的緩衝區後。再後來,包括佈局,可以使用yield :content_name輸出內容:

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

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

因此,在某種意義上,你可以有不同的yield S代表不同的看法,你只要給不同的內容的名稱與content_for的意見,並與佈局相同名稱產生了。

考慮你的情況下,如果你想在不同的地方不同的看法。假設您有三個面板,panel1,panel2和panel3。你可以在你的佈局做到這一點:

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

你甚至都不需要包括普通<%= yield %>,如果你不想。然後,在你的意見,你可以選擇通過與周圍適當content_for整個視圖中顯示其內容面板。例如,你的一個觀點可能會改變這樣的:

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

要在面板顯示2.另外一個可能被用於面板3,如下所示:

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

這對頁面標題非常有用,您希望在其中定製大多數Egbert頁面,但最終必須在每個頁面中指定它。這使得它不適用於僅在身份驗證頁面上隱藏側邊欄的內容。 – ahnbizcad

1

是的,你可以有多個<%= yield %>標籤。您可以在基本視圖中指定每個yield標籤的名稱。

<%= yield :head %>

<%= yield :footer %>

然後使用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 %>