Arel:按关联计数的顺序

时间:2011-09-12 17:00:27

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 arel

这是我正在尝试做的事情

class Question
  has_many :votes
end

class Vote
  belongs_to :question
end

我想通过他们拥有的票数来查找所有问题。我想在Arel(在Rails 3中)表达这一点,而不使用任何计数器缓存。

有没有办法做到这一点?

感谢。

2 个答案:

答案 0 :(得分:4)

尝试下一个:

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

答案 1 :(得分: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")

解决方案与数据库无关。确保在question_id表的votes列中添加索引(即使您不使用此解决方案,也应添加索引)。