2010-01-07 127 views
37

我知道我以前見過這個,但現在找不到任何東西。我想按某個列對查詢進行分組,並能夠顯示每個組中有多少個查詢。我得到了第一部分:Group and count in Rails

@line_items = @project.line_items.all(:group => "device_id") 

這是針對我的訂單項索引視圖,它只是一個顯示訂單項的表格。現在該行項目是按設備分組的,該如何在該表格中爲「count」創建一列?

回答

75

您可以在line_items上做count,這將返回給您一個有序散列device_idcount

@project.line_items.group(:device_id).count 
+1

這給出了一個警告:'折舊警告:不建議使用查找器選項計算關係#。請建立一個範圍,然後調用它來代替。 (從C中調用:'count':)' – Chloe 2013-12-23 22:21:07

+6

@Chloe - 嘗試在Rails 4中刪除警告:'@project.line_items.group(:device_id).count' – 2014-01-07 21:01:03

8

只需添加一個:select選項:

@line_items = @project.line_items.all(
    :group => "device_id", 
    :select => "device_id, COUNT(*) as count" 
) 

然後,每個@line_item將有一個count屬性。

+0

人力資源管理,我把調試(@line_items)在我看來,數組的數組,但我看不出有任何罪名,所以我不不要以爲我理解你。我認爲輸出與沒有選擇選項完全相同。 – tladuke 2010-01-07 18:04:25

+0

這實際上有效,但如果你有:include – tladuke 2010-01-26 23:27:57

+0

調試方法不會顯示計數,因爲它不是ActiveRecord屬性,但每個對象上都有* count屬性。無論如何,錢德拉的解決方案要好得多。 – 2010-01-27 00:52:57

10

哈希devise_id關鍵的和相關的記錄數

@project.line_items.group(:devise_id).count 
3

User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id") 

也可能工作...

0

對於只算勇氣會更快而不是在這裏

@project.line_items.pluck(:device_id).count 


@project.line_items.pluck(:device_id).uniq.count 
+0

它們將爲枚舉屬性返回完全不同的結果。例如: 'customer_subscriptions.group(:狀態).count'將返回: '{1 => 6,2 => 11,3 => 136 0 => 30}' 和'customer_subscriptions。採摘(:狀態).count'只會返回'183' – msdundar 2017-10-16 12:15:30

+0

是真的,那麼uniq呢? @ project.line_items.pluck(:DEVICE_ID).uniq.count – 2017-11-10 09:44:08

0

我想你可以試試這個以及。

@project.line_items.group(:device_id).pluck("device_id, count(device_id)") 

^^這給出了元素的DEVICE_ID和計數「