我正在尝试根据当前收到的投票数得到一个活跃记录对象的排名。在我的对象模型中,我有一个方法'rank'定义为:
Object.count(:conditions => ['votes > (?)', self.votes], :distinct => true) + 1
返回排名。但是,在我的程序的其他地方,我发现我实际上需要在mysql查询本身中获取它。我想尝试做类似下面的事情:
Object.select('id, votes, (SELECT COUNT(DISTINCT "objects"."id")
FROM "objects"
WHERE "objects"."votes" > votes) AS rank').limit(10)
但是,我不知道如何做'objects.votes>投票的一部分。我需要替换'>投票',一些参考自己。不确定这是否清楚。有什么想法吗?
答案 0 :(得分:0)
我猜你的意思是,你如何将self.votes
从rails传递给SQL查询?
你可以这样做:
Object.where("votes > ?",self.votes)
所以要将self.votes
传递给您的查询:
Object.select('id, votes, (SELECT COUNT(DISTINCT "objects"."id")
FROM "objects"
WHERE "objects"."votes" > ?) AS rank',self.votes).limit(10)