ruby on rails -允许每个会话一次操作



我有一个跟踪视频观看的网站…每次调用控制器时。一个人可以用一些沉重的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

最新更新