5

複数のパーシャルを持つソリューションを探していますyields

実際の例では、次のビュー構造があります。

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

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

私のコードを乾かす部分(/views/shared/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 を渡す機能または別のパーシャルをレンダリングする機能を備えたテンプレート ブロックを用意することです。

4

3 に答える 3

3

私の場合、このような解決策を見つけました。

コントローラービュー ( /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>

このソリューションは見栄えがよくありませんが、機能します。近い将来、より良いものが見つかることを願っています。

于 2013-07-01T10:39:46.557 に答える