修复投票机制

我已经实现了一个上/下投票系统,在我的Ruby on Rails应用程序中使用ajax进行更新。 按钮调用create方法,将投票插入数据库,并计算投票金额。

然而,截至目前,用户可以按照他或她想要的次数进行投票或投票。 我希望投票能像我们在StackOverflow上看到的那样,用户只能投票或投票一次,投票可以撤消。 我如何为此构建逻辑?

我推荐使用acts_as_rateable gem,这是我一直用于多个网站的这种要求。 这项工作完美无缺。

如果你想自己实现这个,你的Rating模型应该有一个user_id并且是多态的,以便将自己附加到你想要评价的任何模型。 然后,您可以简单地编写AJAX控制器代码以拒绝重复投票。 在前端,应该实现从现有upvote / downvote中删除链接function的Javascript以实现良好的UX。

我想你还有一些工作要做。 您应该在模型中添加问题和用户之间的多对多关系,您可以在其中记住哪个用户投票选择了哪个问题以及以何种方式(向上或向下)投票。 之后,当您在屏幕上呈现问题时,您应该从该表中选择当前用户与显示的问题相关的投票。

当用户对某个问题进行投票时,您应该将记录添加到相应的表中。此外,在显示问题时,如果用户已经upvoted(downvoted),那么您应该相应地设置upvote(downvote)链接的样式。 如果用户再次尝试投票,则可以在用户已经投票之前在数据库中注册投票之前进行检查。

也许这不是执行此类操作的最快方式,但它可以让您获得最大的控制权(您可以稍后显示有关某个用户的投票方式,投票日期和时间的详细统计信息,您可以限制用户每天可以投票的数量,等等……)

 class Vote < ActiveRecord::Base belongs_to :question belongs_to :user validates_uniqueness_of :user_id, :scope=>question_id end 

http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000086

如果您尝试多次投票,您的控制器将返回错误。 如果您投票支持投票,请让UI删除投票。