Как создать систему голосования в Rails 4 для моих сообщений в блоге, для которой требуется более двух вариантов голосования?

Я создал очень простой блог, посвященный рельсам, который основан на сеансах, подобных терапии, в реальной жизни. В конце каждого сообщения в блоге пользователь может проголосовать за сообщение, в котором говорится: "Как вы себя чувствуете?"

Я почти закончил разработку приложения, но не могу понять, как создать расширенную систему голосования.

Существует 6 различных вариантов эмоций, с которыми пользователь должен иметь возможность голосовать (Счастливый, Грустный, Злой, Вдохновленный, Скучный, Тревожный). Это означает, что один голос ничем не лучше другого. Нет положительных и отрицательных голосов. Они просто разные.

Пока что все жемчужины и учебники, с которыми я сталкивался, имеют систему голосования, которая состоит из двух вариантов. Мне нужен способ реализовать 6.

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

Кто-нибудь когда-нибудь пробовал что-то подобное? После того, как я пойму, как это сделать, я бы хотел превратить его в драгоценный камень, если его еще нет.

1 ответ

(Я предполагаю, что пользователь просто выбирает один голос за пост, и вы используете последнюю версию Rails 4.2)

Просто создайте новую таблицу, которая ссылается на оба User а также Post у которого есть целочисленное поле, с которым мы собираемся использовать новое перечисление, например. Vote с целочисленным полем choiceИтак, модель будет:

class Vote < ActiveRecord::Base
  belongs_to :user
  belongs_to :post

  enum choice: %i[happy sad angry inspired boring anxious]
end

И ваш User а также Post модели будут как has_many :votes

Затем (согласно документации) вы используете Vote.choices чтобы получить хэш имени в целое число (вы будете использовать это для заполнения своего представления).

... и, наконец, вы получите хэш подсчета эмоций для поста в блоге с:

post.votes.group('votes.choice').count

Я уверен, что вы можете выбрать большинство голосов там.

Обновить

ОП спросил в комментарии, где я узнал об этом, я подумал, что мой ответ ему может помочь другим:

Хм, кроме документов, с которыми я уже связал вас в своем ответе, я слежу за списком рассылки rails-core, который объявляет и обсуждает будущие функции, я слежу за @rails в твиттере, где они анонсируют все виды вещей, я читаю релиз заметки о новых версиях, и я просматриваю заметки о выпуске в руководствах после основных выпусков.

Другие вопросы по тегам