テンプレートレンダリングのプロセス

1556 ワード

Railsのレンダリングテンプレートについての手順のまとめ:
1.対応するコントローラで定義されたインスタンス変数が対応するビューに転送されます.
 
 
class StoreController < ApplicationController

  def index
    @products = Product.find_products_for_sale
    @cart = find_cart
  end

end

 
 
 2. store.html.erb
ビューでrenderメソッドを使用してテンプレートのレンダリングを行います.つまり、コントローラから収集されたインスタンス変数をrenderのパラメータとして、レンダリングするテンプレートに渡します.partial=>「cart」はテンプレートの名前で、名前が_cart.html.Erbのテンプレート、ローカルテンプレート_cart.html.Erbにはテンプレート名と同じ変数cartがあります
 
 
 <%= render(:partial => "cart", :object => @cart) %>

 
 
3. _cart.html.erb 
そして、テンプレートでは他のテンプレートをレンダリングし続けることもできます.cartは上から伝わってきて、必要なデータを次のテンプレートに渡します.想像に難くありません.次のテンプレートの名前は:cart_item.html.Erb、同じくこのテンプレートにはcart_がありますitemという同名の変数が使えます.
 
 
<%= render(:partial => "cart_item", :collection => @cart.items) %>

 
4. _cart_item.html.erb,
このテンプレートでcart_を使用するitem変数
 
 
<tr>
  <td><%= cart_item.quantity %> &times;</td>
  <td><%= h cart_item.title %></td>
  <td class="item-price"><%= number_to_currency(cart_item.price) %></td>
</tr>

 
注意:コントローラから渡されるインスタンス変数は、対応するビューでのみ使用でき、複数のビューで共有できません.複数のビューで共有するには、helperまたはApplicationControlで定義して参照する必要があります(これはテストされていません.親切なネットユーザーがヒントを与えています).