0

目前我有 3 个模型UserCollectionItem

AUser有很多Items通过Collections
AnItem有很多Users通过Collections

要获得User' 的集合,我可以做user.items相应的显示。

我想要做的是聚合这个列表的重复项。

说一个User添加Item 1,然后Item 2再另一个Item 1
清单应该是:

User

-Item 1 Name - Item 1 Description - Item 1 Category - Qty 2
-Item 2 Name - Item 2 Description - Item 2 Category - Qty 1
4

2 回答 2

1

查看Enumerable#group_by

您可以使用以下内容对所有项目进行分组:

user.items.group_by(&:id)

...这将为您提供一个散列,其中键是项目 ID,值是共享该 ID 的项目数组。然后,您可以将单个项目进一步折叠到一个计数:

Hash[user.items.group_by(&:id).map {|k,v| [k, v.size]}]

...这将为您提供一个哈希,其中键是项目 ID,值是具有该 ID 的项目数。

于 2012-12-14T22:29:00.900 回答
0

在您的控制器中:

item_groups = user.items.group_by(&:id)
@item_counts = item_groups.map {|item_id,items| [items.first, items.size]}

在您看来:

@item_counts.each do |item, size|
  ... item.name, size or whatever you want to print
于 2012-12-15T02:38:17.570 回答