2011-12-16 6 views
2

私は自分の視点で反復するときにそれらを分離できるように、私のレールに一連の製品を返そうとしています。バッチでActiveRecordオブジェクトをグループ化する

たとえば、13個の製品がある場合、最初の7個を1行に入れ、次の6個を次の行に配置します(私はcssを使用してプロダクト)。

私はfind_in_batchesを試してきましたが、これが適切な方法であるとは言えません。

私が欲しいとき、私は通常、日付に基づいてグループにGROUP_BYを使用
@shelves = Product.find_in_batches(:batch_size => 7) { |products| products } 

、例えば - 数、代わりのモデル属性によってグループにGROUP_BYを使用する方法はありますか?

答えて

4

find_in_batches.mapあなたno blockエラーになります。

@shelves = Product.all.in_groups_of(7) 

そして、あなたは最後のグループはそれを水増し余分nilオブジェクトを持っていないしたい場合は、試してください:あなたが実際に欲しいのです

もちろん
@shelves = Product.all.in_groups_of(7, false) 

、置き換えたいでしょうallより賢明なスコープで、データベースオブジェクトのリスト全体をメモリにロードしないでください:)

+0

ええ、ありがとう!私は 'each_slice'と一緒に行きました。 – Slick23

1

バッチの配列が必要です。バッチをマッピングするだけでそれを行う必要があります。

@shelves = Product.find_in_batches(:batch_size => 7).map{|batch| batch} 
+0

私はいつも 'map'について忘れています...ありがとう。 – Slick23

+0

私はこのエラーを受け取りました。 'ブロックなし(yield)' – Slick23

+0

'find_in_batches'はブロックを期待しています。 'Product.find_in_batches(:batch_size => 7)を試してください{| batch |バッチ} ' –

関連する問題