Ruby on rails:在布局中的特定位置产生特定视图

use*_*974 11 ruby layout yield ruby-on-rails view

如果我有一个<%= yield %>标签,那么我的所有视图都会在布局中的相同位置呈现.我可以<%= yield %>为不同的视图使用不同的标签吗?我是怎么做到的?谢谢

Ben*_*Lee 24

查看ActionView :: Helpers :: CaptureHelper.您可以在视图中执行以下操作:

<% content_for :sidebar do %>
  <!-- sidebar content specific to this page -->
<% end %>
Run Code Online (Sandbox Code Playgroud)

这将在content_for块内运行模板,但不会作为常规模板yield缓冲区的一部分输出,它将存储在单独的缓冲区中以供日后使用.然后,在布局中,您可以使用yield :content_name输出内容:

<div class="content">
    <%= yield %>
</div>

<div class="sidebar">
    <%= yield :sidebar %>
</div>
Run Code Online (Sandbox Code Playgroud)

因此,在某种意义上,您可以yield为不同的视图使用不同的s,您只需在视图中为不同的内容指定名称content_for,并在布局中使用相同的名称生成它.

考虑一下您需要在不同位置使用不同视图的情况.假设你有三个面板,panel1,panel2和panel3.您可以在布局中执行此操作:

<div id="panel1"><%= yield :panel1 %></div>
<div id="panel2"><%= yield :panel2 %></div>
<div id="panel3"><%= yield :panel3 %></div>
Run Code Online (Sandbox Code Playgroud)

<%= yield %>如果你不想,你根本不需要包括平原.然后在您的视图中,您可以选择使用适当的围绕整个视图来显示内容的面板content_for.例如,您的一个视图可能会像这样更改:

<% content_for :panel2 do %>
    <!-- Your View -->
<% end %>
Run Code Online (Sandbox Code Playgroud)

在面板2中显示.另一个可能用于面板3,如下所示:

<% content_for :panel3 do %>
    <!-- Your View -->
<% end %>
Run Code Online (Sandbox Code Playgroud)