给出类似的模型:
Contact (id, user_id, xxx, xxxxxxx)
我想在Contact模型中输出一组唯一的user_id记录?关于如何写这个的任何想法?
由于
答案 0 :(得分:3)
在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
答案 1 :(得分:2)
以下是一些替代方法:
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"