按投票数(协会)对查询结果进行排序

时间:2010-12-18 11:12:05

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

我正在建立一个类似于stackoverflow的排名系统的网站。具体而言,可以对问题进行投票或投票。问题的分数是upvotes的数量减去downvotes的数量。在我的应用程序中,投票belongs_to:question并有一个布尔值:upvote来确定它是upvote还是downvote。我想知道我是否可以根据分数对命名范围进行排序。

SQL等价物将类似于

SELECT * 来自问题q ORDER BY((SELECT COUNT(*)FROM Votes v1 WHERE v1.question_id = q.id AND v1.upvote = true) - (SELECT COUNT(*)FROM Votes v2 WHERE v2.question_id = q.id AND v2.upvote = false))DESC

但我不知道如何把它放到Rails中。有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

ActiveRecord :: Base.connection.execute([你的长查询在这里])太粗糙的解决方案?

答案 1 :(得分:0)

Votes
  scope :upvote, where("votes.upvote = ? ", true)
  scope :downvote, where("votes.upvote = ? ", false)

q.votes.upvote.count - q.votes.downvote.count

答案 2 :(得分:0)

我可以想到使用

这样做的oracle方式
scope :net_count, where("sum(decode(votes.upvote,true,1,false,-1))")

不确定这是否对其他数据库非常便携。

虽然在ruby / rails中有很多很好的方法,但是不能想到任何其他纯粹是“一个范围”的东西。