【发布时间】:2017-07-07 04:42:06
【问题描述】:
我正在使用 thumbs_up gem 在我的应用中允许“喜欢”。
gem 包含此代码以确保一个用户不能投票两次 -
Code '1'
# Comment out the line below to allow multiple votes per user.
validates_uniqueness_of :voteable_id, :scope => [:voteable_type, :voter_type, :voter_id]
但我希望我的用户能够“up_vote”一次,然后如果他们碰巧不小心喜欢了“down_vote”(为了用户体验)。我试图将范围更改为:
validates_uniqueness_of :voteable_id, :scope => [:voteable_type]
但这将允许用户连续两次'up_vote'。相反,如果可投票对象已经“up_vote”,用户应该只能“down_vote”,反之亦然。
在我看来,我可以考虑通过使用条件来做到这一点,例如:
<% if !current_user.voted_for?(voteable_name) %>
<%= link_to('Like', vote_up_question_answer_path(voteable_name), :method => :post) %>
<% else %>
<br>
<%= link_to('Unlike', vote_down_question_answer_path(voteable_name), :method => :post) %>
<% end %>
并注释掉代码“1”,但有没有更好的方法让用户只能通过控制器在投票之间“切换”?
谢谢。
【问题讨论】:
-
你为什么不检查 gemacts_as_votable 它内置了该功能,它还支持加权投票。
-
@CoreyGibson 谢谢,我也浏览过那个 gem,我想我会在阅读后切换(优点 gem 最近又出现了一个错误)。 :)
标签: ruby-on-rails