0

我正在尝试根据当前收到的投票数来获取 activerecord 对象的排名。在我的对象模型中,我有一个方法“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 > votes”部分。我需要用一些对自身的引用来替换“>投票”。不确定这是否清楚。有任何想法吗?

4

1 回答 1

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)
于 2012-04-16T03:31:24.460 回答