2012-11-15 152 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