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

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

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

 <% content_for :sidebar do %>  <% end %> 

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

 
<%= yield %>

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

考虑一下您的情况,您希望在不同的地方使用不同的视图。 假设您有三个面板:panel1,panel2和panel3。 您可以在布局中执行此操作:

 
<%= yield :panel1 %>
<%= yield :panel2 %>
<%= yield :panel3 %>

如果您不想,甚至不需要包含普通的<%= yield %> 。 然后在您的视图中,您可以通过使用适当的content_for围绕整个视图来选择显示内容的面板。 例如,您的一个视图可能会像这样更改:

 <% content_for :panel2 do %>  <% end %> 

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

 <% content_for :panel3 do %>  <% end %> 

是的,您可以拥有多个<%= yield %>标记。 您可以在基本视图中使用这些名称指定每个yield标记。

<%= yield :head %>

<%= yield :footer %>

然后在各个视图中使用content_for标记。

 <% content_for :head do %> <%= stylesheet_link_tag 'custom' %> <% end %> 

您可以使用yield和content来:

  For example: <%= yield :head %> <% content_for :head do %> A simple page <% end %> 
  • 参考: 布局和渲染指南。