2011-04-23 50 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表的規模龐大