2013-10-02 34 views
3

我目前正在構建一個內部分析系統,用於跟蹤訪問者在每個會話中點擊的位置,無論他們是登錄到用戶帳戶還是訪問者沒有帳戶。將用戶代理和IP添加到存儲的會話中-RecordNotSaved -Rails

我目前正在將會話保存到數據庫,這要感謝通過sessions_store.rb所做的更改,但是除了session_id之外,我正試圖弄清楚如何將UserAgent詳細信息和訪問者IP添加到會話表中。

我已經試過了幾個解決方案,但都失敗了 - 我目前的解決方案似乎是最接近的,但我一直在更新會話的屬性後,遇到一個ActiveRecord :: RecordNotSaved錯誤。

我目前使用中的應用程序控制器,過濾器之前:

before_filter :set_useragent_and_ip_in_session 

    def set_useragent_and_ip_in_session 
    if session 
     sess = request.session_options[:id] 
     @session = Session.where(session_id: sess).first 
     @session.update_attributes(:ip=>request.remote_ip, :user_agent=>request.user_agent) 
     @session.save! 
    else 
    end 
    end 

我已經插入調試語句在我的意見,並已在撬代碼周圍的發揮 - 將@Session是有效的,並顯示@ session.user_agent正確....但是,當保存到數據庫它只是回滾。

當我使用保存!我收到一個完成422無法處理的實體在日誌中,除了以下(粘貼到要點,以節省空間): https://gist.github.com/anonymous/8019c2426334f395a5fd

謝謝!任何幫助將非常感激。

回答

0

我會建議重新考慮你的架構。會話可以持續很多請求,並且您希望每個請求都有記錄。還要注意的是如何關閉請求對象,並試圖將數據移動到它們存儲到會話表。而是讓你自己的需求表,並作出之前,過濾器,將所有你想要的數據從請求對象的請求表。現在會話會有很多請求。

我不知道爲什麼你的記錄沒有保存,但我會打賭命名模型會話與導軌衝突。通過當你提出請求表同樣的道理,你應該給它像也許SessionMeta和RequestMeta唯一的名稱。然後SessionMeta可以有很多RequestMeta。