如何使用act-as-votable设置多选项投票系统?

时间:2015-06-16 06:47:06

标签: ruby-on-rails ruby-on-rails-4

我想使用acts-as-votable来实施投票系统,我可以提供多种自定义选项 - 例如5个按钮('蓝色','红色','绿色','灰色','白色')。

我希望我的用户只能选择其中一种颜色,但我希望能够计算每件商品的所有选票(10 - 蓝色,4 - 红色等)。

我觉得我会使用投票范围,但我不太确定如何。

如何使用act-as-votable进行此操作?

1 个答案:

答案 0 :(得分:1)

似乎很简单:

https://github.com/ryanto/acts_as_votable#examples-with-scopes

@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