2011-04-23 63 views
3

我有一个网站跟踪视频视图...每次调用控制器。人们可以用一些沉重的F5ing自己的视频观看。每个会话允许一个动作

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

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

回答

2

您可以创建一个会话变量,可能是在登录时,如:

session[:is_logged] = 1 

然后,每次您要增加计数器时,只需检查此变量即可。

+0

回到这一点,实际上有分配一个数组以得到这工作包含每个视频ID。对于那些关心... – 2011-06-15 15:58:51

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 
2

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

  • 优点:你甚至可以让动作一次 每个用户避免登录/注销
  • 缺点:users_videos表的规模庞大