我想顯示正在閱讀帖子的人員列表。 在嘗試實現該功能之前,我想徵求一些建議。我將首先檢查在PostsController
中調用show
操作的用戶;每次有人查看帖子時,他都會被記錄到正在閱讀帖子的人員名單中。不過,我不知道如何從列表中刪除的人,當他從導航從閱讀帖子。有沒有辦法使用cookies
或sessions
來注意用戶是否離開某個頁面?一點點的幫助可以幫助我馬上開始!顯示是否有人正在閱讀帖子
我欣賞任何建議。謝謝!
我想顯示正在閱讀帖子的人員列表。 在嘗試實現該功能之前,我想徵求一些建議。我將首先檢查在PostsController
中調用show
操作的用戶;每次有人查看帖子時,他都會被記錄到正在閱讀帖子的人員名單中。不過,我不知道如何從列表中刪除的人,當他從導航從閱讀帖子。有沒有辦法使用cookies
或sessions
來注意用戶是否離開某個頁面?一點點的幫助可以幫助我馬上開始!顯示是否有人正在閱讀帖子
我欣賞任何建議。謝謝!
要在控制器
更準確在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
通常使用超時系統。
與其存儲布爾型「正在閱讀帖子」,我們可以存儲用戶閱讀帖子的日期。
不,您可以輕鬆設置超時時間(例如5分鐘)以知道誰在閱讀帖子。這是一個近似值,但這幾乎是現實的。
優點:
感謝這個!只需要更多的幫助,我想我可以實現這一點。我想我會創建一個名爲'Reader'的模型並設置'post has_many readers',但是我擔心這是否效率低下? – 2013-04-05 23:33:20
因此,每當用戶發佈帖子時,我都會執行 'post.readers.create(user:current_user)',並且該記錄應該在5分鐘後自動過期。那可能嗎? – 2013-04-05 23:41:01
如果你有時間,http://stackoverflow.com/questions/15845446/railsautomatically-remove-a-record-after-a-few-minutes – 2013-04-06 00:01:06
謝謝@Amol!我沒想到會得到像這樣的實際代碼。我真的很感激它,但我會嘗試自己實現理解邏輯更好:) – 2013-04-05 23:20:28
如果你有時間,http://stackoverflow.com/questions/15845446/railsautomatically-remove-a-record-after-a-few - 分鐘 – 2013-04-06 00:00:42
這取決於,如果您需要進一步維護歷史記錄(db)或暫時保留(緩存) – 2013-04-06 04:32:32