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