我在博客模型中设置了一个简单的评级系统。我使用自定义方法来提高评级,这在博客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
现在,我可以根据需要多次投票,这当然是一场灾难。用户可以多次投票并推动计数方式。
我如何制作,以便在提交一次后投票提交按钮消失。我想过制作一个单独的模型进行评级并使用自定义令牌,但对于一个简单的应用程序来说似乎不必要的复杂。
任何帮助?
塞特希
答案 0 :(得分:1)
您需要为在特定主题/帖子上投票的用户保留一个列表,或者您需要为包含用户投票的帖子的每个用户保留一个列表。您是否将信息与帖子或用户一起存储是您的选择,可能取决于您的应用程序要求。
当显示包含投票按钮的页面时,您必须检查current_user
是否已经投票。如果投票已经投出,请不要显示按钮。出于安全原因,您可能还想检查用户是否使用上面显示的代码进行投票,以防止在不使用按钮的情况下进行投票。
如果您还允许未登录的人投票,则需要存储他们的IP地址或其他内容。
答案 1 :(得分: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小时)更改投票。