我在 Rails v2.3 应用中看到了一些代码。
在layout/car_general.html.erb
中(此视图由cars_controller中的方法调用),我看到了代码:
<body>
<%= yield %>
<%= javascript_include_tag 'jquery-1.4.2.min' %>
<% javascript_tag do %>
<%= yield :jstemplates %>
var some_car = new Object;
<%= yield :some_car %>
<% end -%>
</body>
要问两个问题:
<body>
下。 <%= yield :jstemplates %>
以及<%= yield :some_car %>
,是指某个视图还是只显示some_car
的价值?答案 0 :(得分:52)
没有任何参数,yield将呈现当前控制器/动作的模板。因此,如果您在cars/show
页面上,则会呈现views/cars/show.html.erb
。
当您传递yield参数时,它允许您在模板中定义要在该模板之外呈现的内容。例如,如果您的cars/show
页面包含要在页脚中呈现的特定html代码段,则可以将以下内容添加到展示模板和car_general
布局中:
<强> show.html.erb:强>
<% content_for :footer do %>
This content will show up in the footer section
<% end %>
<强>布局/ car_general.html.erb 强>
<%= yield :footer %>
Rails指南中有一个关于使用yield和content_for的好部分:http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield
content_for
的API文档也很有用,还有其他一些示例可供使用。请注意,它适用于Rails 3.1.1,但此功能自2.3以来没有太大变化,如果有的话,仍应适用于3.0.x和3.1.x.