Arel: порядок по количеству ассоциаций - PullRequest
1 голос
/ 12 сентября 2011

Вот что я пытаюсь сделать

class Question
  has_many :votes
end

class Vote
  belongs_to :question
end

Я хочу найти все вопросы, упорядоченные по количеству голосов, которые они имеют.Я хочу выразить это в Arel (в Rails 3) без использования счетчиков кэшей.

Есть ли способ сделать это?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Попробуйте следующее:

Question.joins(:votes).select("questions.id, *other question coulmns*, count(votes.id) as vote_count").order("vote_count DESC").group("questions.id")
1 голос
/ 13 сентября 2011

Попробуйте:

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

Решение не зависит от БД.Убедитесь, что вы добавили индекс к столбцу question_id в таблице votes (вы должны добавить индекс, даже если вы не используете это решение).

...