У меня очень простое требование - у меня есть макет, состоящий из заголовка и тела. Это подмакет страницы, а не сама страница.
Этот макет повторяется на нескольких страницах, и возможно, что структура вокруг него изменится. Поэтому я хочу иметь возможность отделить содержимое заголовка и содержимое тела от структуры, которая его содержит.
Моя первая попытка состояла в том, чтобы использовать частичный рендеринг в качестве макета, который использовал именованные выходы для рендеринга заголовка и тела:
<header class="Resource-header">
<%= yield :resource_header %>
</header>
<div class="Resource-body">
<%= yield :resource_body %>
</div>
Затем визуализируйте его из моих шаблонов следующим образом:
<%= render layout: 'admin/resource' do %>
<% content_for :resource_header do %>
<% end %>
<% content_for :resource_body do %>
<% end %>
<% end %>
Однако это ничего не дает.
Я начал играть с порядком вещей и обнаружил, что если блоки content_for объявлены до вызова партиала, этот подход работает:
<% content_for :resource_header do %>
<% end %>
<% content_for :resource_body do %>
<% end %>
<%= render layout: 'admin/resource' do %><% end %>
Однако это кажется невероятно хакерским. Кажется, что content_for
имеет глобальную область видимости, и нет никакой связи между блоком content_for
и частичным рендерингом.
Так каков правильный способ для меня достичь этого?