2011-05-08 5 views

답변

3

가 SQL에서이 일을 여러 가지 방법이 있지만, 당신이 원하는 경우에 가능한 한 많은 액티브에서 제공하는 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.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" 
2

그것을 할 몇 가지 다른 방법입니다! 나는`카운트`가 어떤 주장도 받아 들였다는 것을 몰랐다. 도!
+0

contacts' FROM : 여기

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

+2

': distinct => true' 옵션을 사용하는 더 많은 API 방법이 있습니다. – htanata

관련 문제