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」部分の実行方法がわかりません。「> votes」をそれ自体への参照に置き換える必要があります。それが明らかかどうかはわかりません。何か案は?

4

1 に答える 1

0

self.votesRails から 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 に答える