Упорядочить посты по количеству голосов

Привет всем, давний читатель, первый постер :)

У меня есть приложение с сообщениями, и я использую gem thumbs_up (rails v. 3.0.7), чтобы добавлять голоса к сообщениям. Я реализовал стену славы для сообщений, показывающих 10 лучших сообщений, и я просто не могу понять, как сортировать сообщения по голосам (метод плюс-минус).

Теперь я просто использую:

def wall_of_fame
@posts = Post.tally(
  {   :at_least => 1,
      :at_most => 10000,
      :limit => 10,
      :order => 'vote_count desc'
  })

конец

и для стены позора:

def wall_of_fame
@posts = Post.tally(
  {   :at_least => 1,
      :at_most => 10000,
      :limit => 10,
      :order => 'vote_count asc'
  })

конец

но на самом деле мне нужно упорядочить сообщения, используя метод плюс-минус, а не просто vote_count, потому что он просто показывает мне некоторые сообщения, а не те, которые получили наибольшее количество голосов, или как минимум что-то вроде:

:order => 'votes_for asc'

и для стены_позора

:order => 'votes_against asc'

В настоящее время voices_for и voices_against можно использовать только в таких представлениях, как

@post.votes_for

Как я могу использовать их в своем контроллере сообщений, чтобы иметь возможность использовать их в :order => ?

Спасибо.


person Stefan Gelenchev    schedule 13.06.2011    source источник
comment
Что ж, я добавил voices_plus и voices_minus в таблицу сообщений и сделал действие voice_up, чтобы добавить к ним +1. Таким образом, если пользователь голосует за сообщение, он также добавляет +1 голос к самой таблице сообщений. Это не лучший способ сделать это, но теперь он работает;)   -  person Stefan Gelenchev    schedule 14.06.2011


Ответы (2)


Я тоже столкнулся с этой проблемой, но я построил свой механизм голосования с нуля. В итоге я отсортировал свои посты по просмотрам. Итак, я переделал их так:

<%= render @posts.sort_by { |post| post.votes.size }.reverse %>

Это упорядочило мои посты от наибольшего количества голосов до наименьшего количества голосов.

Удачи!

@thatdankent

person thatdankent    schedule 06.08.2011
comment
Ничего себе, пытался понять это в течение последнего часа, это намного проще, чем я себе представлял. - person chaseadamsio; 29.03.2013

Вам просто нужно заказать плюсминус:

http://gistpages.com/2013/08/28/order_by_votes_using_the_thumbs_up_gem

Design.plusminus_tally.order('plusminus_tally DESC')
person Teej    schedule 28.08.2013