2011-10-21 47 views
29

我在Rails v2.3應用程序中看到了一些代碼。Rails:關於收益率

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> 

兩個問題要問:

  1. 我在哪裏可以找到的產量內容第一個<%=產率%>在<body>之下。
  2. 它是一個軌道的具體方式,通過使用 <%= yield :jstemplates %>以及<%= yield :some_car %>包含js代碼在視圖中,它是指向一個視圖還是僅顯示some_car的值?

回答

51

沒有任何參數,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的手冊裏有關於使用產量和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。