2012-11-15 78 views
9

我有一个项目的集合我想用一个部分来呈现:的Rails:渲染采集部分:获取集合的大小内部分

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

<%= render :collection => @items, :partial => 'item' %> 

,我想用编号升序数字的元素。所以输出应该是:

3: a 
2: b 
1: c 

我知道轨提供了部分内部计数器,所以如果我想编号的项目下降,我可以创建以下部分:

<%= item_counter %>: <%= item %> 

这给我

1: a 
2: b 
3: c 

但对于上升数字,我需要的总数Ø ˚F项目,我可以用一个本地的部分提供:

<%= render :collection => @items, :partial => 'item', :locals => {:total => @items.size} %> 

,然后在部分:

<%= total - item_counter %>: <%= item %> 

但感觉对我来说,重复的,因为渲染方法已经知道了集合的大小。

除了使用局部变量外,是否真的没有办法获得某个集合中某个集合的项目总数?

+1

号[见自己(https://github.com/rails/rails/blob/master/actionpack/lib/action_view/renderer/partial_renderer.rb) –

+0

我看了,但我想我错过了一些东西。 –

回答

11

以下是可能的,因为Rails的4.2版本

在里面你可以访问称为collection_iteration函数/变量的部分。调用collection_iteration.size会给你总数。

changelog:使用集合渲染的谐音当

的迭代对象可作为本地变量 #{template_name}_iteration

它可以访问集合的size上迭代时, 当前index和两个方便的方法first?last?

+1

不,部分中不存在“集合”。至少不在Rails 3.2.6中。你从哪里得到这些信息? –

+0

我从源代码中得到了这个:https://github.com/rails/rails/blob/6b8dd70083d747535cc35dce176e5afb6ad98177/actionpack/lib/action_view/renderer/partial_renderer.rb#L220 – lucasuyezu

+0

我也在发布答案之前在我的工作应用程序上测试过。我可能会在周二检查它的Rails版本,但它确实工作。 – lucasuyezu