2013-06-21 32 views
4

我在尋找解決方案以部分產生多個yields部分在軌中有多個產量

在實際的例子,我有這樣的看法結構:

基本application.erb(/views/layouts/application.erb):

<!DOCTYPE html> 
<head> 
    <title>Some title</title> 
</head> 
<body> 
<div class="page"> 
    <%= yield %> 
</div> 
</body> 
</html> 

有些偏幹我的代碼(/視圖/共享/ content.erb):

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

和控制器視圖(/views/home/index.erb):

<%= render :partial => 'layouts/header' %>  
<%= render :partial => 'shared/navigation' %> 

<% # It is close to what I want to do %> 
<%= render :layout => 'shared/content' do %> 
    <% content_for :sidebar do %> 
     <%# This is will go to application.erb, not in content.erb %> 
     <%= render :partial => 'shared/menu' %> 
    <% end %> 

    <%= yield %> 
<% end %> 

<%= render :partial => 'layouts/footer' %> 

所以這裏的主要問題是有多個產量區和能力的模板塊自定義HTML通過或使另一部分。

回答

2

在我的情況下,我找到了這樣的解決方案。

在我的控制器的視圖(/views/home/index.erb):

<% sidebar_content = render :partial => 'shared/slider' %> 
<%= render :layout => 'shared/content', :locals => {:sidebar => sidebar_content} do %> 
    <%= yield %> 
<% end %> 

局部具有多個區域(/views/shared/content.erb):

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

這個解決方案看起來不漂亮,但它的工作原理。我希望能在不久的將來找到更好的東西。

+0

您是否已經找到了更好的解決方案? – Lichtamberg

+0

沒有。我用模板改變了我的工作流程。我只使用partials,並試圖避免passig另一個partial作爲參數。特別是在上面提到的例子中,我將在裏面創建一個'內容'部分'菜單'。 '/ shared/content/default.erb', '/ shared/content/with_menu.erb' –

+0

Hm ok .. thx!我也沒有找到更好的解決方案.. – Lichtamberg

4

這個問題很舊,但是,當我在Google上搜索答案時,它仍然相關。

我已經想出了一個解決方案,雖然還不漂亮,但效果很好。這個想法使用Rails的capture方法,它需要一個塊,並存儲其內容到一個變量:

controller.html.erb

<%= render 'shared/partial', body: capture { %> 
    My body content 
<% }, footer: capture { %> 
    My footer content 
<% } %> 

共享/ _partial.html.erb

<div id="body"><%= body %></div> 
<div id="footer"><%= footer %></div> 

希望這可以幫助別人!