博客投票系统的验证

时间:2018-08-31 03:15:02

标签: ruby-on-rails validation blogs voting-system

我正在为一个男人建立一个网站。我根本不是一个经验丰富的开发人员,但是他很友好,可以让我尝试一下。我想构建一个无用户投票系统,使人们不必创建帐户并登录即可对他的RSS feed上的博客文章进行投票和评论。我正在尝试创建验证,以防止同一个人进行多次投票。不知道我该怎么做。任何想法都欢迎!

这是我的投票控制者:

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>

1 个答案:

答案 0 :(得分:0)

您可以在三种可能的解决方案中进行选择:

  • 在用户的浏览器中存储cookie。但是问题在于技术熟练的用户可以克服这种保护。他们可以切换到其他浏览器,也可以在浏览器中删除特定的cookie并再次投票。

  • 与用户IPs将选票存储在数据库中。但是此解决方案的问题在于用户和IP地址未一对一映射。许多人共享相同的IP。

  • 仅允许已登录的用户投票并将标志存储在database中。如果您想防止同一个人进行多次投票,那么我认为这是最佳解决方案。