我试图找到多个模型中标签计数的总数。
在一个模型中,效果很好:
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')
有什么想法吗?
答案 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构建此查询