每个会话允许一次操作

时间:2011-04-23 20:55:27

标签: ruby-on-rails ruby session

每次调用控制器时,我都有一个跟踪视频视图的站点。人们可以通过一些沉重的F5ing来淹没他们自己的视频观看。

如何使视图计数或方法每个会话只运行一次?

def show
  new_views = @video.views + 1
  @video.update_attributes(:views => new_views)
end

3 个答案:

答案 0 :(得分:2)

您可以在登录时创建会话变量,例如:

session[:is_logged] = 1

然后,每次你要增加计数器时,只需检查这个变量。

答案 1 :(得分:2)

单个会话变量不起作用,因为您有许多视频,并且您希望将不同视频的计数分开。我认为更好的方法是在db中存储视图事件。

  • 专业人士:您甚至可以允许一次行动 每个用户避免登录/注销
  • 缺点:巨大的用户数量_视频表

答案 2 :(得分:0)

最简单的方法是在会话中跟踪它:

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