2010-01-23 70 views
2

我在博客模型中设置了简单的评分系统。我使用自定义方法来提高评分,这在博客数据库中是整数。阻止用户在Rails中多次投票

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 

现在,我可以根据自己的意愿多次投票,这当然是一场灾难。用户可以多次进行投票,并可以继续进行计数。

如何使投票提交按钮在提交一次后就会消失。我想为评分和使用自定义令牌制作单独的模型,但对于简单的应用程序来说似乎不必要的复杂。

任何帮助?

塞特希

回答

1

这样做的一种方法是让您的Post模型和一个RatedPost模型。 RatedPost模型可能包含如 incremented:boolean,decremented:boolean, changed_by:integer (user_id), post_id:integer的信息。

然后,您可以确定RatedPost.find_by_post_id_and_changed_by(post.id, user.id)是否返回任何记录。

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

1

您也需要保持与用户列表谁在一个特定的主题/后投票或你需要保持连接到包含用户投票职位每个用户的列表。无论您是将信息与帖子还是用户一起存储,都是您的选择,并且可能取决于您的应用程序要求。

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

如果你还允许没有登录的人投票,你需要存储他们的IP地址或其他东西。