批量分组ActiveRecord对象

时间:2011-12-16 01:59:22

标签: ruby-on-rails-3 activerecord

我正在尝试在我的轨道中返回一组产品,这样当我在我的视图中进行迭代时,我可以将它们分开。

例如,如果我有13个产品,我希望视图中的块将前7个放在一行上,中断并将下一个6放在下一行(我使用css将一个架子放在下面产品)。

我一直在尝试使用find_in_batches,但似乎无法使其工作(甚至不确定它是否是合适的方法)。

@shelves = Product.find_in_batches(:batch_size => 7) { |products| products }

当我想根据日期进行分组时,我通常会使用group_by - 有没有办法使用group_by按计数分组,而不是模型属性?

2 个答案:

答案 0 :(得分:4)

find_in_batches.map会出现no block错误。你真正想要的是:

@shelves = Product.all.in_groups_of(7)

如果您希望最后一个组没有额外填充nil个对象,请尝试:

@shelves = Product.all.in_groups_of(7, false)

当然,您需要将all替换为更合理的范围,这样您就不会将整个数据库对象列表加载到内存中:)

答案 1 :(得分:2)

您需要一组批次。只需映射批次即可。

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