防止用户在Rails中多次投票

我在博客模型中设置了一个简单的评级系统。 我使用自定义方法来提高评级,这在博客db中是整数。

def increase @post = Post.find(params[:id]).increment!(:rating) if logged_in? current_user.increment!(:votes) end flash[:notice] = "Thanks for rating" redirect_to posts_url end 

现在,我可以按照自己的意愿投票多次,这当然是一场灾难。 用户可以多次投票并推动计数方式。

我如何做到这一点,以便投票提交按钮在提交一次后消失。 我想为评级制作一个单独的模型并使用自定义令牌,但对于一个简单的应用程序来说似乎不必要地复杂化。

有帮助吗?

塞特希

这样做的一种方法是使用Post模型和RatedPost模型。 RatedPost模型可以包含incremented:boolean信息incremented:booleandecremented:booleanchanged_by:integer (user_id)post_id:integer

然后,您可以识别RatedPost.find_by_post_id_and_changed_by(post.id, user.id)返回任何记录。

您还可以识别点是递增还是递减。 因此,您可以允许用户在一段时间(例如24小时)内更改其投票。

您需要为在特定主题/post上投票的用户保留一个列表,或者您需要为包含用户投票的post的每个用户保留一个列表。 您是否将信息与post或用户一起存储是您的选择,可能取决于您的应用程序要求。

显示包含投票按钮的页面时,您必须检查current_user是否已经投票。 如果已经投票,请不要显示按钮。 出于安全原因,您可能还需要检查用户是否使用您在上面显示的代码中投票,以防止在不使用按钮的情况下进行投票。

如果您还允许未登录的人投票,则需要存储他们的IP地址或其他内容。