我不确定如何yield
在 ERB 级别上起作用,但我确实知道它在应用于布局时如何工作。
这是一个示例layout.html.erb文件:
<html>
<head>
<title> <%= @title || 'Plain Title' %> </title>
<%= yield :head %>
</head>
<body>
<div id='menu'>
<%= yield :menu %>
</div>
<div id='content'>
<%= yield %>
</div>
<div id='footer'>
<%= yield :footer %>
</div>
</body>
我定义了 4 个产量(:head、:menu、:footer 和 default)和一个实例变量@title。
现在控制器操作可以渲染插入这些点的视图。请注意,视图在布局之前渲染,因此我可以在视图中定义像 @title 这样的变量,并在布局中定义它。
视图示例:
关于页面
<% @title = 'About' %>
<% content_for :menu do %>
<%= link_to 'Back to Home', :action => :home %>
<% end %>
We rock!
<% content_for :footer do %>
An Illinois based company.
<% end %>
编辑页面
<% @title = 'Edit' %>
<% content_for :head do %>
<style type='text/css'> .edit_form div {display:inline-block;} </style>
<% end %>
<% form_for :thing, :html => {:class => 'edit_form'} do |f| %>
...
<% end %>
您可以混合和匹配您想要放入数据的产量以及发生的情况content_for :something
将被插入到匹配的yield :something
在布局文件中。
它甚至适用于部分,部分可以插入自己的 content_for :something 块,该块将与任何其他 content_for 调用一起添加。