2

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

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

现在,我可以随心所欲地投票,这当然是灾难的根源。用户可以多次投票并推动计数方式上升。

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

有什么帮助吗?

森提尔

4

2 回答 2

1

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

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

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

于 2010-01-23T12:39:48.913 回答
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 小时)更改他的投票。

于 2010-01-23T14:13:46.633 回答