我有下面的代码在我的Rails 3应用程序控制器:除非Rails控制器中的语句?
def like
@suggestion = Suggestion.find(params[:id])
@suggestion.voteip = request.env['REMOTE_ADDR']
@suggestion.update_attribute(:votes, @suggestion.votes + 1)
redirect_to suggestions_url
end
def dislike
@suggestion = Suggestion.find(params[:id])
@suggestion.voteip = request.env['REMOTE_ADDR']
@suggestion.update_attribute(:votes, @suggestion.votes - 1)
redirect_to suggestions_url
end
正如你可以看到代码递增/递减1投票整数,并增加了用户的IP地址,称为voteip
列。
我试图实现的是从同一个IP连续两次投票的简单块。因此,如果例如我的IP是123.123.123.123
并且我投了些什么,我就无法再从相同的IP地址对相同的建议(向上或向下)进行投票。
这是一个非常简单,无法靠近速率限制投票的万无一失的方法。虽然在环境中它将被用于它几乎完美!
一旦我有这个工作,我打算为投票时间戳添加另一列,然后我可以做一些事情,例如只允许5分钟后通过同一个IP投票。
任何意见将不胜感激!
我是否认为@ last_vote.created_at可以更改为last_vote.voted_at,如果我创建一个名为voted_at的列?目前唯一与投票表决相关的是投票栏。 – dannymcc 2012-08-10 20:33:24
呃你可以但'@ last_vote'找到由指定IP投票的最后一条建议。然后,如果这个last_vote是在不到2分钟前创建的,那么它会渲染文字说“迷路”或做任何你想要的东西 – 2012-08-10 21:20:20
但是是的,你应该不需要添加另一列我不认为:) – 2012-08-10 21:20:39