我正在为一个人建立一个网站。我根本不是一个经验丰富的开发人员,但他非常友好地让我试一试。我想构建一个无用户投票系统,人们无需创建帐户并登录以对其RSS源上的博客文章进行投票和评论。我正在尝试创建验证以防止来自同一个人的多个投票。不知道我会怎么做。欢迎任何想法!
这是我的投票控制员:
def upvote
@voting = HomeBlog.find(params[:home_blog_id])
@voting.votings.build( :upvote => true, :downvote => false)
@voting.save!
redirect_to request.referrer, notice: "Thanks for the vote!"
end
def downvote
@voting = HomeBlog.find(params[:home_blog_id])
@voting.votings.build( :downvote => true, :upvote => false)
@voting.save!
redirect_to request.referrer, notice: "Thanks for the vote!"
end
页面视图:
p id="notice"><%= notice %></p>
<div id="blog-post-show">
<div id="voting-count">
<%= link_to(home_blog_upvote_path(@home_blog.id), {method: :post}, html_options = {})do %>
<%= @home_blog.votings.select { |v| v.upvote == true}.count %><%= image_tag "if_icon-ios7-arrow-up_211690.png" %>
<% end %><br>
<%= link_to(home_blog_downvote_path(@home_blog.id), {method: :post}, id: "downvote") do %>
<%= @home_blog.votings.select { |v| v.downvote == true}.count %><%= image_tag "if_down_1303877.png" %>
<% end %>
</div>
<h3 id="blog-post-show-title">
<b><%= @home_blog.name %> | <%= @home_blog.created_at.to_date %></b>
</h3>
<%= @home_blog.entry.html_safe %>
</div>
您可以在此问题的三种可能解决方案中进行选择:
cookie
。但问题是技术熟练的用户可以克服这种保护。他们可以切换到不同的浏览器或删除浏览器中的特定cookie并再次投票。IPs
将投票存储在数据库中。但是这个解决方案的问题是用户和IP地址不是一对一映射的。许多人共享相同的IP。database
中投票并存储标记。如果你想防止来自同一个人的多次投票,我认为这是最好的解决方案。