Сортировка результатов запроса по количеству голосов (ассоциаций) - PullRequest
1 голос
/ 18 декабря 2010

Я делаю веб-сайт с системой ранжирования, аналогичной stackoverflow.В частности, Вопросы могут быть одобрены или понижены.Оценка по Вопросу - это количество положительных голосов минус количество отрицательных голосов.В моей заявке, "Vote" принадлежит: question: question и имеет логическое значение: upvote, чтобы определить, является ли это повышением или понижением.Мне было интересно, могу ли я сделать именованную область видимости для сортировки по баллам.

Эквивалент SQL будет выглядеть примерно так:

SELECT * FROM Вопрос q ORDER BY ((SELECT COUNT (*) FROM Votes)v1 WHERE v1.question_id = q.id AND v1.upvote = true) - (ВЫБЕРИТЕ СЧЕТ (*) ИЗ ГОЛОСОВ v2 WHERE v2.question_id = q.id И v2.upvote = false)) DESC

НоЯ не уверен, как поместить это в Rails.Есть идеи?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 18 декабря 2010
Votes
  scope :upvote, where("votes.upvote = ? ", true)
  scope :downvote, where("votes.upvote = ? ", false)

q.votes.upvote.count - q.votes.downvote.count
0 голосов
/ 18 декабря 2010

Я могу придумать оракульный способ сделать это с помощью

scope :net_count, where("sum(decode(votes.upvote,true,1,false,-1))")

Не уверен, что это будет очень переносимо для других баз данных.

Есть много хороших способов сделать это в ruby ​​/ rails, но я не могу думать о любых других, которые являются просто "одной областью".

0 голосов
/ 18 декабря 2010

Является ли ActiveRecord :: Base.connection.execute ([ваш длинный запрос здесь]) слишком грубым решением?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...