Rails:渲染集合部分:获取部分内部的集合大小

Sve*_*cke 12 ruby-on-rails

我有一个我想用部分渲染的项目集合:

@items = ['a','b','c']

<%= render :collection => @items, :partial => 'item' %>
Run Code Online (Sandbox Code Playgroud)

我想用升序数字对元素进行编号.所以输出应该是:

3: a
2: b
1: c
Run Code Online (Sandbox Code Playgroud)

我知道rails在partial中提供了一个计数器,所以如果我想对降序的项进行编号,我可以创建以下部分:

<%= item_counter %>: <%= item %>
Run Code Online (Sandbox Code Playgroud)

这给了我

1: a
2: b
3: c
Run Code Online (Sandbox Code Playgroud)

但是对于递增的数字,我需要项目的总数,我可以提供一个本地的部分:

<%= render :collection => @items, :partial => 'item', :locals => {:total => @items.size} %>
Run Code Online (Sandbox Code Playgroud)

然后在部分:

<%= total - item_counter %>: <%= item %>
Run Code Online (Sandbox Code Playgroud)

但是我感觉像重复一样,因为渲染方法已经知道了集合的大小.

除了使用局部变量之外,真的没有办法让集合中的项目总数达到局部吗?

小智 14

自Rails版本4.2以来可能有以下内容:

在partial中你可以访问一个名为的函数/变量collection_iteration.打电话collection_iteration.size会给你总数.

来自更改日志:

#{template_name}_iteration使用集合渲染部分时,迭代对象可用作局部变量 .

它允许访问size正在迭代的集合,当前index和两个方便的方法first?last?.