Determining whether yields have content

Hey All,
I would like some logic that would help me determine whether a yield has any content to it. For example:

<%= yield :submenu %>

I only want to display the div around the yield if the yield will have content.

Any ideas?


You can do:

<% if !yield(:submenu).strip.blank? -%>
   <div class="submenu">
     <%= yield :submenu %>
<% end -%>

The call may be expensive so you might want to create some other method of determining whether the submenu is likely to have content. But this should work.


Just confirming, its expensive since it renders the yield twice, correct? What if i did something like:

<% yield_contents = yield(:submenu)
if !yield_contents.strip.blank? -%>

 <%= yield_contents %>

<% end -%>

Would that work?

I guess I never realized that I could yield twice. Thanks for the tip. Much appreciated.

That should work. A different solution altogether would be to have the submenu contain the div wrapper so you can make the test there and eliminate all the gnarly logic in your layout.