Рубин на рельсах: получение определенных видов в определенных местах макета - PullRequest
11 голосов
/ 22 сентября 2011

Если у меня есть один тег <%= yield %>, тогда все мои представления отображаются в одном и том же месте макета.Могу ли я иметь разные <%= yield %> теги для разных видов?Так как мне это сделать?Спасибо

Ответы [ 3 ]

24 голосов
/ 22 сентября 2011

Просмотр 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 %>
1 голос
/ 22 сентября 2011

Да, вы можете иметь несколько <%= yield %> тегов.Вы можете указать каждый тег yield с такими именами в базовом представлении.

<%= yield :head %>

<%= yield :footer %>

Затем используйте тег content_for в своеминдивидуальные взгляды.

<% content_for :head do %>
  <%= stylesheet_link_tag 'custom' %>
<% end %>
0 голосов
/ 22 сентября 2011

Вы можете использовать урожай и контент для:

 For example:
 <%= yield :head %>
<% content_for :head do %>
  <title>A simple page</title>
<% end %>
...