2017-02-17 18 views
0

我有一張跟蹤用戶喜歡的表。如何在羣組中包含記錄並計數

Liked_item.group('name').order('count_id desc').count('id').take(4) 

這將導致一個這樣的數組:

=> [["Name1", 10], ["Name 2", 8], ["Name 3", 5], ["Name 4", 3]] 

現在,而不是僅僅名稱和數量,我想包括完整的記錄現在,我用這條線獲得前4名(喜歡沒有綁定到模型,這就是爲什麼我必須按名稱分組)。做這個的最好方式是什麼?

回答

1

它看起來像一個候選人使用scope

class LikedItem 
    scope :by_name, ->(name) { where(name: name) } 
end 

用法:

LikeItem.by_name(name) 

將返回您指定名稱的所有喜歡的ActiveRecord的集合。

如果你確實想與名稱的哈希值的關鍵和like_items作爲價值的列表,你可以使用紅寶石(不推薦):

LikeItem.all.group_by(&:name).each_with_object({}) do |(name, collection), hash| 
    hash[name] = { collection: collection, count: collection.size } 
end 
+0

但我不是尋找一個特定項目,我只是看着桌子,挑選出現最多的名字。現在我有了這條線,我得到了這個結果,但它只返回名稱和數量而不是完整的記錄 – stoerebink

+1

@stoerebink我編輯了答案。看到最後一行 –

+0

謝謝隊友。只是想知道爲什麼不推薦最後一行? 編輯:我只是在控制檯跑這和它看起來更好,但它不包括數 – stoerebink

相關問題