テンプレートレンダリングのプロセス
1556 ワード
Railsのレンダリングテンプレートについての手順のまとめ:
1.対応するコントローラで定義されたインスタンス変数が対応するビューに転送されます.
2. store.html.erb
ビューでrenderメソッドを使用してテンプレートのレンダリングを行います.つまり、コントローラから収集されたインスタンス変数をrenderのパラメータとして、レンダリングするテンプレートに渡します.partial=>「cart」はテンプレートの名前で、名前が_cart.html.Erbのテンプレート、ローカルテンプレート_cart.html.Erbにはテンプレート名と同じ変数cartがあります
3. _cart.html.erb
そして、テンプレートでは他のテンプレートをレンダリングし続けることもできます.cartは上から伝わってきて、必要なデータを次のテンプレートに渡します.想像に難くありません.次のテンプレートの名前は:cart_item.html.Erb、同じくこのテンプレートにはcart_がありますitemという同名の変数が使えます.
4. _cart_item.html.erb,
このテンプレートでcart_を使用するitem変数
注意:コントローラから渡されるインスタンス変数は、対応するビューでのみ使用でき、複数のビューで共有できません.複数のビューで共有するには、helperまたはApplicationControlで定義して参照する必要があります(これはテストされていません.親切なネットユーザーがヒントを与えています).
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 %> ×</td>
<td><%= h cart_item.title %></td>
<td class="item-price"><%= number_to_currency(cart_item.price) %></td>
</tr>
注意:コントローラから渡されるインスタンス変数は、対応するビューでのみ使用でき、複数のビューで共有できません.複数のビューで共有するには、helperまたはApplicationControlで定義して参照する必要があります(これはテストされていません.親切なネットユーザーがヒントを与えています).