我在ActiveRecord中使用count-distinct进行选择,但它没有返回任何聚合字段。
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 :(得分:1)
您的查询可能会按预期工作,但inspect
方法会让您失望。请在此处阅读我的回答,以获得更好的说明:Why group calculation fields do not show up in query result?
您可以在对象上调用service_credit_count
和service_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