yield if content, render something otherwise (Rails 3)
rendering, ruby-on-rails, view
Solution
How about something like this?
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% else %>
<div>default_content_here</div>
<% end %>
Inspiration from this SO question
Problem
I've been away from Rails for a while now, so maybe I'm missing something simple. How can you accomplish this: ``` <%= yield_or :sidebar do %> some default content <% end %> ``` Or even: ``` <%= yield_or_render :sidebar, 'path/to/default/sidebar' %> ``` In the first case, I'm trying: ``` def yield_or(content, &block) content_for?(content) ? yield(content) : yield end ``` But that throws a 'no block given' error. In the second case: ``` def yield_or_render(content, template) content_for?(content) ? yield(content) : render(template) end ``` This works when there's no content defined, but as soon as I use content_for to override the default content, it throws the same error. I used this as a starting point, but it seems it only works when used directly in the view. Thanks!