Как создать систему голосования в 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 в твиттере, где они анонсируют все виды вещей, я читаю релиз заметки о новых версиях, и я просматриваю заметки о выпуске в руководствах после основных выпусков.