render collection渲染集合

渲染集合时使用局部视图特别方便。通过 :collection 选项把集合传给局部视图时,会把集合中每个元素套入局部视图渲染:

< h1 >Products</ h1 >
<%= render partial: "product" , collection: @products %>
< p >Product Name: <%= product.name %> </ p >

传入复数形式的集合时,在局部视图中可以使用和局部视图同名的变量引用集合中的成员。在上面的代码中,局部视图是 _product,在其中可以使用 product 引用渲染的实例。

渲染集合还有个简写形式。假设 @products 是 product 实例集合,在 index.html.erb 中可以直接写成下面的形式,得到的结果是一样的:

< h1 >Products</ h1 >
<%= render @products %>

Rails 根据集合中各元素的模型名决定使用哪个局部视图。其实,集合中的元素可以来自不同的模型,Rails 会选择正确的局部视图进行渲染。

< h1 >Contacts</ h1 >
<%= render [customer1, employee1, customer2, employee2] %>
< p >Customer: <%= customer.name %> </ p >
< p >Employee: <%= employee.name %> </ p >

在上面几段代码中,Rails 会根据集合中各成员所属的模型选择正确的局部视图。

如果集合为空,render 方法会返回 nil,所以最好提供替代文本。

< h1 >Products</ h1 >
<%= render( @products ) || "There are no products available." %>


3.4.6 本地变量

要在局部视图中自定义本地变量的名字,调用局部视图时可通过 :as 选项指定:

<%= render partial: "product" , collection: @products , as: :item %>

这样修改之后,在局部视图中可以使用本地变量 item 访问 @products 集合中的实例。

使用 locals: {} 选项可以把任意本地变量传入局部视图:

<%= render partial: "product" , collection: @products ,
            as: :item , locals: {title: "Products Page" } %>

在局部视图中可以使用本地变量 title,其值为 "Products Page"

在局部视图中还可使用计数器变量,变量名是在集合后加上 _counter。例如,渲染 @products 时,在局部视图中可以使用 product_counter 表示局部视图渲染了多少次。不过不能和 as: :value 一起使用。

在使用主局部视图渲染两个实例中间还可使用 :spacer_template 选项指定第二个局部视图。



3.4.7 间隔模板
<%= render partial: @products , spacer_template: "product_ruler" %>

Rails 会在两次渲染 _product 局部视图之间渲染 _product_ruler 局部视图(不传入任何数据)。

3.4.8 集合局部视图的布局

渲染集合时也可使用 :layout 选项。

<%= render partial: "product" , collection: @products , layout: "special_layout" %>

使用局部视图渲染集合中的各元素时会套用指定的模板。和局部视图一样,当前渲染的对象以及 object_counter 变量也可在布局中使用。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值