Ruby on Rails - 输出模型中每个字段的唯一记录 # 的查询



给定一个模型,如下所示:

Contact (id, user_id, xxx, xxxxxxx)

我想有一个查询来输出联系人模型中唯一user_id记录的 #?关于如何写这个有什么想法吗?

谢谢

在SQL中有几种方法可以做到这一点,但是如果您想尝试尽可能多地保持在ActiveRecord提供的ORM中,我认为以下是您将获得的最接近的方法:

@user_ids = Contact.select('DISTINCT user_id').all

然后,@user_ids将从联系人表中的记录引用的所有用户 ID 的数组。如果你想知道有多少,你可以打电话给@user_ids.count


更新:另一种方法可以提供更多信息,而无需实例化每个对象并避免编写 SQL 的开销,如下所示:

Contact.group('user_id').count  #=> { 1 => 3, 2 => 4, 3 => 10 }

如您所见,响应是一个哈希值,其中用户 ID 作为键,每个用户的数量作为值。您可以使用其他.count获取唯一用户 ID 的数量:

Contact.group('user_id').count.count  #=> 3

以下是一些替代方法:

Contact.count('user_id', :distinct => true)
# SELECT COUNT(DISTINCT "contacts"."user_id") FROM "contacts"
Contact.count('DISTINCT user_id')
# SELECT COUNT(DISTINCT user_id) FROM "contacts"

相关内容

  • 没有找到相关文章

最新更新