模版点染的过程

模版渲染的过程

关于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中或者ApplicationController中定义并引用(这个没有测试过,一个好心的网友提示了一下)