2012-04-16 4 views
0

私はactiverecordオブジェクトのランクを現在受け取った投票数に基づいて取得しようとしています。ランクを返しmysqlのエントリのランクを取得します。

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'を置き換える必要があります。それが明確かどうかはわかりません。何か案は?

+0

それは、このためのSQLソリューションを提供するのに役立ちますか? –

+0

もちろんです! – Marc

答えて

0

self.votesをレールから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) 
+0

多分私はそれを十分に説明しなかった。私はコントローラでこれをやっているので、自己はありません。私はおそらくこれに間違って近づいています。 – Marc

+0

あなたはオブジェクトの投票を比較するために何か必要があります。だからモデルポストを持っていて、投票数が多い場合は、最も投票数の多い投票を投稿し、新しい投票が来たら、そのポストの投票と新しい投票の数を比較する必要があります最も人気のある票を記録し、ランクを決定する。 – RadBrad

関連する問題