2011-09-12 6 views
1

によって順序は私は彼らが持っている投票数順すべての質問を検索したいAREL:ここでは、アソシエーション数

class Question 
    has_many :votes 
end 

class Vote 
    belongs_to :question 
end 

やろうとしているものです。私はカウンタキャッシュを使用せずにArel(Rails 3)でこれを表現したいと思います。

これを実行する方法はありますか?

ありがとうございました。

答えて

1

はこれを試してみてください:

Question.select("questions.*, a.vote_count AS vote_count"). 
joins("LEFT OUTER JOIN (
    SELECT b.question_id, COUNT(b.id) AS vote_count 
    FROM votes b 
    GROUP BY b.question_id 
) a ON a.question_id = questions.id") 

ソリューションはDBに依存しないです。 votesテーブルのquestion_id列にインデックスを追加してください(このソリューションを使用しない場合でもインデックスを追加する必要があります)。

4

は、次の方法を試してください。

Question.joins(:votes).select("questions.id, *other question coulmns*, count(votes.id) as vote_count").order("vote_count DESC").group("questions.id") 
+0

あなたは 'group(" questions.id ")'を意味しましたか? –

+0

はい、申し訳ありません。単に入力してください。 – bor1s

+0

選択の際に他の質問列* '' 'を簡単に得る方法はありますか?私は '' 'group()' 'でそれが必要になると思います。 –

関連する問題