我正在建立一个类似于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中。有什么想法吗?
谢谢!
答案 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中有很多很好的方法,但是不能想到任何其他纯粹是“一个范围”的东西。