2015-12-09 132 views
0

我在ActiveRecord中使用count-distinct進行選擇,但它沒有返回任何聚合字段。在ActiveRecord查詢中選擇不同的計數而不返回聚合字段

User. 
    select(
    'users.id, count(distinct(shc.id)) as shipping_credit_count, 
    count(distinct(sc.id)) as service_credit_count' 
). 
    ... 
    ... 
    group('users.id') 

僅返回#<ActiveRecord::Relation [#<User id: 119>]>我期待在我的聚合字段中看到計數?爲什麼沒有返回?

+0

嘿其實它返回你一個活躍的記錄,你可以通過as_json seriallizer'用戶查看你的結果。 select('users.id,count(distinct(shc.id))as shipping_credit_count, count(distinct(sc.id))as service_credit_count')。 group('users.id')。as_json' –

回答

1

您的查詢可能按預期方式工作,但inspect方法正在拋出您。讀到這裏我的回答對一個更好的描述:Why group calculation fields do not show up in query result?

你應該能夠調用service_credit_countservice_credit_count你的對象,即使它並沒有顯示出來,當你登錄他們。

然而,我會執行它有點不同。我會在User模型添加方法

def service_credit_count 
    return service_credit_count_sql if self.respond_to?(:service_credit_count_sql) 
    services.count 
end 

def shipping_credit_count 
    return shipping_credit_count_sql if self.respond_to?(:shipping_credit_count_sql) 
    shippings.count 
end 

,然後在查詢名稱後綴的領域。這樣你總是可以使用這些計數。還有一個小的(相當不成熟)的寶石,我寫的是這樣的:https://github.com/trialbee/association_count

+0

令人驚歎。我不確定有人會回答。在結果上調用'shipping_credit_count'就可以做到這一點。感謝您花時間回答,非常感謝您的先生! – theartofbeing

相關問題