Rails:关于产量

Mel*_*lon 32 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我在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>
Run Code Online (Sandbox Code Playgroud)

要问两个问题:

  1. 我在哪里可以找到第一个<%=产量%>的产量内容<body>.
  2. 它是一种特定于rails的方式,通过使用<%= yield :jstemplates %>和在视图中包含js代码 <%= yield :some_car %>,它是指向一个视图还是只是为了显示它的值some_car

Pet*_*own 55

如果没有任何参数,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 %>
Run Code Online (Sandbox Code Playgroud)

布局/ car_general.html.erb

<%= yield :footer %>
Run Code Online (Sandbox Code Playgroud)

Rails指南有一个关于使用yield和content_for的很好的部分:http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

API文档也content_for很有用,还有一些其他示例可供使用.请注意,它适用于Rails 3.1.1,但此功能自2.3以来没有太大变化,如果有的话,仍然应用于3.0.x和3.1.x.