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