2012-11-15 19 views
9
部分

内のコレクションのサイズを持って行き方:のRails:部分コレクションをレンダリング:私は部分的にレンダリングしたいアイテムのコレクション

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

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

と私は昇順番号を持つ要素を番号を付けます。だから、出力は次のようになります。

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

た:

3: a 
2: b 
1: c 

私は降順アイテムに番号をしたい場合、私は以下の部分を作成することができるようにレールは、部分的に内部カウンタを提供して知っています私

1: a 
2: b 
3: c 

を与えるしかし昇順番号については、私は総数Oを必要としますF私は部分的にローカルで提供することができます項目、:部分で

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

、その後:

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

しかしrenderメソッドがすでに知っているので、それは、繰り返しのように私には感じていますコレクションのサイズ

ローカル変数を使用している場合を除いて、コレクション内のアイテムの合計数を部分的に取得する方法はありませんか?あなたはcollection_iterationと呼ばれる関数/変数へのアクセス権を持っている部分の内側

+1

号[自分のために参照してください](https://github.com/rails/rails/blob/master/actionpack/lib/action_view/renderer/partial_renderer.rb) –

+0

私はそこに見えたが、私は思いました何かが欠けていた。 –

答えて

11

次はRailsのバージョン4.2以来可能です。 collection_iteration.sizeを呼ぶと合計が得られます。 changelogから

:コレクションでパーシャルをレンダリングするとき

繰り返しオブジェクトは、ローカル変数 #{template_name}_iterationとして使用可能です。

これは、繰り返し処理されたコレクションのsize、 現在indexと2便利なメソッド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

関連する問題