0

現在、私は3つのモデルを持っています:User、、。CollectionItem

AUserには多くのItemsスルーがありますCollections
AnItemには多くのUsersスルーがありますCollections

Userのコレクションを取得するにはuser.items、それに応じてそれらを表示します。

私ができるようにしたいのは、このリストの重複アイテムを集約することです。

Useraを追加しItem 1Item 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 に答える