2017-07-13 44 views
0

我正在創建應用程序,其中包含課程/測試,現在我需要創建包含一些信息的報告卡。我想向用戶添加列,以便跟蹤在線時間(無空閒時間)。例如,學生按下網站上的任何按鈕(例如),這意味着學生在線並且(current_user.online_time不應該停止),但是如果學生沒有超過5分鐘 - (current_user.online_time應該停止)。我發現了一塊寶石devise lastseenable,但無法想象知道如何使它按照我的意願工作。當U僅在用戶(創建/更新/刪除/或與屬於用戶的模型)做任何動作時追蹤任何其他動作。有人可以給我任何想法嗎?如何跟蹤用戶是否進行任何操作Rails應用程序

+0

你的ApplicationController和before_action過濾器? –

+0

你有沒有考慮過只爲谷歌分析這樣的東西?您是否真的需要一個自定義解決方案來跟蹤整個網站的特定用戶和特定規則? –

+0

我的應用程序將由學生使用,我需要跟蹤他們有用的在線活動@TomLord –

回答

1

無需使用專門爲此目的而構建的外部gem,就可以組合一個簡單的用戶跟蹤功能。下面是所需的實施步驟的列表:

1. total_time_onlinelast_seen_at字段添加到User

  • total_time_online將包含的秒數,用戶在網上看到
  • last_seen_at會保存用戶上次與網站互動的日期和時間

2.將active_now!方法添加到User

只要用戶正在與網站進行交互,就會調用此方法。它負責遞增total_time_online值和更新last_seen_at領域:

class User 
    ActivityThreshold = 5.minutes 
    # ... 
    def active_now! 
    time_since_last_activity = [Time.now - last_seen_at, 0].max 

    if time_since_last_activity <= ActivityThreshold 
     self.total_time_online ||= 0 
     self.total_time_online += time_since_last_activity 
    end 

    self.last_seen_at = Time.now 
    save! 
    end 
    # ... 
end 

這隻會遞增total_time_online如果最後的互動小於5分鐘前。

3.在每次請求當前用戶呼叫active_now!

的全球before_action應該做的伎倆:

class ApplicationController < ActionController::Base 
    # ... 
    before_action :record_user_activity 
    # ... 
    private 
    # ... 
    def record_user_activity 
    current_user.active_now! if current_user 
    end 
end 
+0

謝謝你的回答!它工作正常。我們在應用程序控制器之前添加動作,但我不需要在我的應用程序的視頻觀看頁面上記錄用戶活動。如何才能在操作之前刪除1個控制器? –

+1

使用'skip_before_action'選擇性跳過特定控制器中的before操作。 –

相關問題