充当多个模型的计数标记

时间:2012-12-29 08:56:46

标签: ruby-on-rails acts-as-taggable-on

我试图找到多个模型中标签计数的总数。

在一个模型中,效果很好:

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

但是,我还有另一个名为Organization的模型,它也采用了标签。这让我有两个独立的计数:

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 个答案:

答案 0 :(得分: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构建此查询