Как мне настроить систему голосования с несколькими вариантами, используя акты как голосование?

Я хочу использовать акты как голосование для реализации системы голосования, в которой я могу предоставить несколько пользовательских опций - например, 5 кнопок ("синий", "красный", "зеленый", "серый", "белый").

Я хочу, чтобы мои пользователи могли выбирать только один из этих цветов, но я хотел бы иметь возможность подсчитать все голоса (10 - синий, 4 - красный и т. Д.) За элемент.

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

Как мне сделать это с актами как голосование?

1 ответ

Решение

Кажется, довольно просто:

https://github.com/ryanto/acts_as_votable

@item.vote_by voter: @user1, vote_scope: 'blue'
@item.vote_by voter: @user2, vote_scope: 'red'

@item.votes_for.size # => 2
@item.find_votes_for(vote_scope: 'blue').size # => 1
@item.find_votes_for(vote_scope: 'red').size # => 1

Таким образом, вам потребуется набор из 5 переключателей (для 5 цветов) на странице, чтобы пользователь мог выбрать их, и отправьте выбранные параметры в контроллер, где вы создадите голосование с выбранным цветом.

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

@user.voted_for? @item # => true

Обновление на основе комментариев

params: {id: 1, scope: 'green'}

@item = Item.find(params[:id])
scope = params[:scope]
if ['red', 'blue', 'green'].include? scope
  @item.vote_by voter: current_user, vote_scope: scope
else
  # show error message
end
Другие вопросы по тегам