2009-10-27 6 views
2

우리는 스택으로 표현할 개체가 있습니다 (MMO에 항목을 겹쳐 놓는 것을 생각해보십시오). 행이 중복됩니다.ActiveRecord에서 1 개의 쿼리를 사용하여 개체 수 계산 및 선택

우리의 owned_objects 테이블은 다음과 같이 보입니다.

user_id | object_id 
1  | 27 
1  | 27 
3  | 46 
3  | 46 
5  | 59 

나는 쿼리가

SELECT 
    user_id, 
    object_id, 
    count(*) AS count 
FROM owned_objects 
GROUP BY 
    user_id, 
    object_id; 

을하고 3 별개의 OwnedObject의 (또는 너무 일하는 것이 별개의 Object의를 받고) 및 그와 관련된 카운트 하나를 반환합니다.

나는 이것이 SQLAlchemy에서 가능하다는 것을 알고 있지만 ActiveRecord로 할 수 있습니까?

답변

3

방법에 대한 ...

@objects = user.objects.all(:select => "count(*) as count, objects.*", :group => :object_id) 

... 또는 유사한?

그런 다음 각 개체에 동적으로 생성 된 속성으로 카운트를 검색 할 수 있습니다

@object.first.count # the "stack depth" of the first object. 

이 가정 중 하나 has_and_belongs_to_many :objects 또는 사용자에 has_many :objects, :through => :owned_objects.

+0

흠, 그래서 그것을 시도하고 그것은 개체를 반환하고 올바른 쿼리를 수행하지만 어떻게 하나의 호출에서 계산을 검색합니까? – mikelikespie

+0

각 개체의 #count 속성에 있어야합니다. – cwninja

+0

리플렉션에 count라는 열이 없으므로 작동하지 않는다고 생각하십시오. '# count'에 의해 당신은 단지 클래스 메쏘드'count'를 참조하고 있습니다. – mikelikespie

0

발견 해결책이지만 가장 깨끗한 지 확실하지 않습니다 (희망하지 않음).

기본적으로 해당 쿼리를 수행하고 모델을 만든 SQL보기를 만들었습니다. 마이그레이션에 대한 견해를 인식 할 수있는 레일 용 플러그인이 있습니다.

관련 문제