Я был вдали от направляющих некоторое время теперь, поэтому возможно, я пропускаю что-то простое.
Как может Вы выполнять это:
<%= yield_or :sidebar do %>
some default content
<% end %>
Или даже:
<%= yield_or_render :sidebar, 'path/to/default/sidebar' %>
В первом случае я пробую:
def yield_or(content, &block)
content_for?(content) ? yield(content) : yield
end
Но это не бросает 'блок, данный' ошибка.
Во втором случае:
def yield_or_render(content, template)
content_for?(content) ? yield(content) : render(template)
end
Это работает, когда нет никакого определенного содержания, но как только я использую content_for для переопределения содержания по умолчанию, он бросает ту же ошибку.
Я использовал это в качестве начальной точки, но кажется, что это только работает при прямом использовании в представлении.
Спасибо!
Как насчет чего-то подобного?
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% else %>
<div>default_content_here</div>
<% end %>
Я не знал, что вы можете использовать content_for(:content_tag)
без блока, и он будет возвращать то же содержимое, как если бы он использовал yield(:content_tag)
.
Итак:
def yield_or_render(content, template)
content_for?(content) ? content_for(content) : render(template)
end