Просмотр ActionView :: Helpers :: CaptureHelper .Вы можете сделать что-то подобное в своих представлениях:
<% content_for :sidebar do %>
<!-- sidebar content specific to this page -->
<% end %>
Это запустит шаблон внутри блока content_for, но не будет выводиться как часть обычного буфера yield
шаблона, он будет сохранен вотдельный буфер на потом.Затем, в том числе в макете, вы можете использовать yield :content_name
для вывода содержимого:
<div class="content">
<%= yield %>
</div>
<div class="sidebar">
<%= yield :sidebar %>
</div>
Таким образом, в некотором смысле вы можете иметь разные yield
s для разных представлений, вам просто нужно датьразличное содержимое - имя с content_for
в представлениях и его имя с тем же именем в макете.
Рассмотрим ваш случай, когда вам нужны разные представления в разных местах.Допустим, у вас есть три панели, панель 1, панель 2 и панель 3.Вы можете сделать это в своем макете:
<div id="panel1"><%= yield :panel1 %></div>
<div id="panel2"><%= yield :panel2 %></div>
<div id="panel3"><%= yield :panel3 %></div>
Вам даже не нужно включать простой <%= yield %>
, если вы не хотите.Затем в своих представлениях вы можете выбрать, на какой панели показывать контент, окружив весь вид соответствующим content_for
.Например, один из ваших видов может быть изменен следующим образом:
<% content_for :panel2 do %>
<!-- Your View -->
<% end %>
для отображения на панели 2. Другой может быть предназначен для панели 3, например так:
<% content_for :panel3 do %>
<!-- Your View -->
<% end %>