1

複数のモデルにわたるタグ数の合計数を見つけようとしています。

1 つのモデルでは、うまく機能します。

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

ただし、ハッシュタグも使用する Organization と呼ばれる別のモデルもありました。それは私に2つの別々のカウントを残します:

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

ただし、2つの合計数を取得できるようにしたいと考えています。それらを追加しようとすると、それらはマージされませんが、代わりにテーブルを互いに積み重ねるだけです:

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

関連するすべてのモデルに対して、次のようなものと同等のメソッドが必要です。

Hashtag.tag_counts.order('count desc')

何か案は?

4

1 に答える 1

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 を使用してこのクエリを作成します

于 2013-09-17T09:19:20.070 に答える