2012-04-16 3 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> ГОЛОСОВ. Мне нужно заменить «> голоса», с некоторой ссылкой на себя. Не уверен, что это понятно. Есть идеи?

+0

Поможет обеспечить SQL решение для этого? –

+0

, конечно, было бы! – Marc

ответ

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) 
+0

Возможно, я не объяснил это достаточно хорошо. Я делаю это в контроллере, поэтому нет я. Вероятно, я ошибаюсь. – Marc

+0

Вам нужно что-то, чтобы сравнить голоса объекта против. Итак, если у вас есть модельный пост, и у вас много голосов, вам нужно будет записать в «Опубликуйте голосование», набрав больше всего голосов, а затем, когда появятся новые голоса, вы можете сравнить количество нового голосования против Post запись самого популярного голоса, а затем определить ранг. – RadBrad

Смежные вопросы