2013-04-05 37 views
0

我想顯示正在閱讀帖子的人員列表。 在嘗試實現該功能之前,我想徵求一些建議。我將首先檢查在PostsController中調用show操作的用戶;每次有人查看帖子時,他都會被記錄到正在閱讀帖子的人員名單中。不過,我不知道如何從列表中刪除的人,當他從導航從閱讀帖子。有沒有辦法使用cookiessessions來注意用戶是否離開某個頁面?一點點的幫助可以幫助我馬上開始!顯示是否有人正在閱讀帖子

我欣賞任何建議。謝謝!

回答

2

要在控制器

更準確

在routes.rb中

post "/posts/:id/being_read" => "posts#being_read", :defaults => { :format => "json"} 

PostsController < ApplicationController 
    def being_read 
    current_user && @post.being_read_by current_user 
    head :ok 
    end 
end 

顯示頁面

function beingRead(){ 
    $.post("/posts/<%[email protected]%>/being_read", function(data) { 
    setTimeout(beingRead,10000); 
    }); 
} 

在post.rb

def being_read_by user=nil 
    # making use of rails low level cache 

    readers_ids = Rails.cache.fetch("Post #{id} being read", :expires_in => 5.minutes) || [] 

    readers_ids = Rails.cache.fetch("Post #{id} being read", :expires_in => 5.minutes) (readers_ids << user.id) if user 

    readers_ids 
end 
+0

謝謝@Amol!我沒想到會得到像這樣的實際代碼。我真的很感激它,但我會嘗試自己實現理解邏輯更好:) – 2013-04-05 23:20:28

+0

如果你有時間,http://stackoverflow.com/questions/15845446/railsautomatically-remove-a-record-after-a-few - 分鐘 – 2013-04-06 00:00:42

+0

這取決於,如果您需要進一步維護歷史記錄(db)或暫時保留(緩存) – 2013-04-06 04:32:32

2

通常使用超時系統。

與其存儲布爾型「正在閱讀帖子」,我們可以存儲用戶閱讀帖子的日期。

不,您可以輕鬆設置超時時間(例如5分鐘)以知道誰在閱讀帖子。這是一個近似值,但這幾乎是現實的。

優點:

  • 你可以刪除完成日期時,你要(用cron裏,每一天,或別的東西),用一個單一的查詢,而不是一個每個視圖。
  • 您解決誰關閉了瀏覽器(如果沒有下一個頁面打開)用戶的問題
+0

感謝這個!只需要更多的幫助,我想我可以實現這一點。我想我會創建一個名爲'Reader'的模型並設置'post has_many readers',但是我擔心這是否效率低下? – 2013-04-05 23:33:20

+0

因此,每當用戶發佈帖子時,我都會執行 'post.readers.create(user:current_user)',並且該記錄應該在5分鐘後自動過期。那可能嗎? – 2013-04-05 23:41:01

+0

如果你有時間,http://stackoverflow.com/questions/15845446/railsautomatically-remove-a-record-after-a-few-minutes – 2013-04-06 00:01:06

相關問題