2012-12-29 2 views
1

여러 모델에서 총 태그 수를 찾으려고합니다.은 여러 모델에 걸쳐 개수에 따라 taggable 역할을합니다.

은 하나 개의 모델에서는 잘 작동 :

Post.tag_counts_on(:hashtags).order('count desc') 

을하지만, 나는 또한 해시 태그 소요뿐만 아니라기구라는 또 다른 모델을했다. 따라서 2 개의 개별 카운트가 표시됩니다.

Post.tag_counts_on(:hashtags).order('count desc') 
Organization.tag_counts_on(:hashtags).order('count desc') 

그러나이 두 가지에서 총 카운트를 얻을 수 있기를 원합니다. 내가 그들을 추가하려고하면, 그들은 병합 있지만 대신 서로의 테이블 스택하지 않습니다

:

Post.tag_counts_on(:hashtags).order('count desc') + 
Organization.tag_counts_on(:hashtags).order('count desc') 

이 같은 동등한 수 있도록 모든 관련 모델을위한 방법이 있어야합니다을

Hashtag.tag_counts.order('count desc') 

아이디어가 있으십니까?

답변

1

난 당신이

를 필요한 경우이 쿼리를 작성하는

SELECT tags.name, count(*) as tag_count 
FROM tags JOIN taggings on taggings.tag_id = tags.id 
where taggings.taggable_type = 'Post' or taggings.taggable_type='Organization' 
GROUP BY tags.name 
ORDER BY tag_count DESC 

사용 arel을 선택 사용자 정의로 갈 수 있다고 생각