Есть несколько способов сделать это в SQL, но если вы хотите попытаться как можно больше придерживаться ORM, предоставляемого ActiveRecord, я думаю, что вам ближе всего будет следующее:
@user_ids = Contact.select('DISTINCT user_id').all
@user_ids
будет тогда массивом всех идентификаторов пользователей, на которые ссылаются записи в таблице контактов. Если вы хотите узнать, сколько их, вы можете просто позвонить @user_ids.count
.
Обновление : еще один способ сделать это, который предоставляет еще больше информации без дополнительных затрат на создание экземпляров каждого объекта и избегает написания SQL, выглядит следующим образом:
Contact.group('user_id').count #=> { 1 => 3, 2 => 4, 3 => 10 }
Как видите, ответом является хеш с идентификаторами пользователей в качестве ключей и количеством для каждого пользователя в качестве значения. Вы можете получить количество уникальных идентификаторов пользователя с помощью другого .count
:
Contact.group('user_id').count.count #=> 3