13

パーシャルでレンダリングしたいアイテムのコレクションがあります:

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

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

そして、要素に昇順の番号を付けたいと思います。したがって、出力は次のようになります。

3: a
2: b
1: c

Rails はパーシャル内にカウンターを提供することを知っているので、項目に降順で番号を付けたい場合は、次のパーシャルを作成できます。

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

それは私に与えます

1: a
2: b
3: c

しかし、昇順の数値については、項目の合計数が必要です。これは、ローカルからパーシャルに提供できます。

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

そして部分的に:

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

しかし、render メソッドは既にコレクションのサイズを認識しているため、繰り返しのように感じます。

ローカル変数を使用する以外に、パーシャル内のコレクションのアイテムの総数を取得する方法は本当にありませんか?

4

2 に答える 2

20

Rails バージョン 4.2 以降では、次のことが可能です。

パーシャル内では、 という関数/変数にアクセスできますcollection_iteration。電話collection_iteration.sizeすると合計が出ます。

変更ログから:

#{template_name}_iteration反復オブジェクトは、コレクションでパーシャルをレンダリングするときにローカル変数として使用できます 。

sizeこれは、反復されるコレクションの 、現在のindexおよび 2 つの便利なメソッドfirst?およびへのアクセスを提供しますlast?

于 2012-11-15T20:50:54.953 に答える