Partial, Layout, Template rendering problems

2019-05-15 11:33发布

The Situation

So when I visit a page, I want to be able to apply a layout to a partial (I have three partials that I want with the same layout). Right now, I am trying to do it with this command:

<%= render :partial => "shared/services/essay", :layout => "layouts/services/tab_pane", :locals => { :service => "essay" } %>

where shared/services/essay goes something like:

<% content_for :intro do %>
<p>
    blah.
</p>
<% end %>

<% content_for :workflow do %>
<div>
    blah.
</div>
<% end %>

<% content_for :value_prop do %>
<p>
    blah.
</p>
<% end %>

and `layouts/services/tab_pane' goes like:

<div class="tab-pane fade in" id=<%= service %> >
    <%= yield :intro %>

    <div class="span7 workflow">
        <h3>Workflow</h3>
        <%= yield :workflow %>
    </div>

    <div class="span5 value-proposition">
        <h3>Our Value Proposition for You</h3>
        <%= yield :value_prop %>
        <div class="call-to-action">
            <%= link_to "Action!", contact_path, class: "btn btn-large btn-warning" %>
        </div>
    </div>
</div>

The Problem

When I load it up, I just get the layout HTML. None of the content is put through. So essentially, the yields aren't pulling in content or something.

Could someone help? Thanks!

Things I've tried

If I try nested layouts as mentioned on Ruby Guides (adding...

<%= render :template => "layouts/services/tab_pane", :locals  => { :service => "essay" } %>

to my partials and making all the proper name changes), my second partial contains content from the first, and my third from both the first and second. So my second partial would contain 2 blah's for each section and my third partial would contain 3 blah's for each section. Thanks!

UPDATE:

The problem is now solved (thanks Michael), but now I guess I was wondering what best practices were when dealing with something like this. Should I avoid something like this in the future and only worry about giving templates/layout to whole pages as opposed to partials within the page? Thanks!

1条回答
Anthone
2楼-- · 2019-05-15 11:56

I wonder if you are getting hit with the ViewFlow handling of partials. Are you calling this partial several times? The problem is rails stores the content_for data in a hash and its non-destructive.

You could try adding:

def yield_content!(content_key) view_flow.content.delete(content_key) end

in your ApplicationHelper and call yield_content instead of yield in your layout file.

查看更多
登录 后发表回答