Если у меня есть тег <%= yield %>
, то все мои представления отображаются в одном месте в макете. Могу ли я иметь разные теги <%= yield %>
для разных видов? Так, как мне это сделать? Благодаря
Ruby on rails: использование определенных видов в определенных местах макета
Ответ 1
Посмотрите ActionView:: Помощники:: 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
для разных представлений, вам просто нужно дать различающемуся содержимому имя с content_for
в представлениях и присвоить его с тем же именем в макете.
Подумайте о своем случае, когда вам нужны разные взгляды в разных местах. Скажем, у вас три панели: panel1, panel2 и panel3. Вы можете сделать это в своем макете:
<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 %>
Ответ 2
Да, вы можете иметь несколько тегов <%= yield %>
. Вы можете указать каждый тег yield
с именами, подобными этим в базовом представлении.
<%= yield :head %>
<%= yield :footer %>
Затем используйте тег content_for
в ваших индивидуальных представлениях.
<% content_for :head do %>
<%= stylesheet_link_tag 'custom' %>
<% end %>
Ответ 3
Вы можете использовать доход и контент для:
For example:
<%= yield :head %>
<% content_for :head do %>
<title>A simple page</title>
<% end %>