我有一个跟踪视频观看的网站…每次调用控制器时。一个人可以用一些沉重的f5来淹没自己的视频观看。
如何使一个视图计数或一个方法只运行一次会话?
def show
new_views = @video.views + 1
@video.update_attributes(:views => new_views)
end
您可以在登录时创建一个会话变量,如:
session[:is_logged] = 1
然后,每次要增加计数器时,只需检查该变量
单会话变量不起作用,因为你有很多视频,你想为不同的视频分开计数。我认为更好的方法是在数据库中存储视图事件。
- 优点:您甚至可以允许一次操作每个用户避免登录/注销
- 缺点:users_videos表太大
最简单的方法是在会话本身中跟踪它:
def show
if session[:has_counted_view] == nil
new_views = @video.views + 1
@video.update_attributes(:views => new_views)
session[:has_counted_view] = true
end
end