Ruby on rails 在多个模型中充当计数标记

Ruby on rails 在多个模型中充当计数标记,ruby-on-rails,acts-as-taggable-on,Ruby On Rails,Acts As Taggable On,我正在尝试查找多个模型的标签计数总数 在一个模型中,它非常有效: Post.tag_counts_on(:hashtags).order('count desc') 然而,我有另一个模型,也叫组织,它也接受hashtags。这就给我留下了两个不同的计数: Post.tag_counts_on(:hashtags).order('count desc') Organization.tag_counts_on(:hashtags).order('count desc') 但是,我希望能够得到这两

我正在尝试查找多个模型的标签计数总数

在一个模型中,它非常有效:

Post.tag_counts_on(:hashtags).order('count desc')
然而,我有另一个模型,也叫组织,它也接受hashtags。这就给我留下了两个不同的计数:

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')

有什么想法吗?

我想你可以选择定制的

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构建此查询

我认为您可以使用自定义的select

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生成此查询