在ActiveRecord查询中选择count distinct count不返回聚合字段

时间:2015-12-09 23:07:56

标签: ruby-on-rails activerecord

我在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>]>我希望在我的聚合字段中看到计数?为什么没有归还?

1 个答案:

答案 0 :(得分: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