2013-02-26 51 views

回答

1

你可以通過在你的表格中定義額外的字段say status來做到這一點,例如users

所以,當任何用戶得到logged in,你必須設置這個領域的狀態,如說,在線。

然後在您的控制器的創建方法你只需做到以下幾點:

User.create(:status => "online", #other params go here) 

你也可以定義新的註冊用戶與身份說,offline

這個你可以這樣做在用戶註冊的時間做:

User.new(:status => "offline", #other params go here) 

然後找到登錄的用戶,你可以這樣做:

@online_users = User.where(:status => "online") 

UPDATE:

對於沒有點擊註銷按鈕的用戶,上述想法不起作用。

所以你必須將這個想法與Jugernaut之類的東西結合起來,然後定期發送ping來知道用戶是否還在那裏。

+0

雅。精湛的想法..我在等待一些更多的答案,如果別人不適合我會接受你的答案。給出+1 – 2013-02-26 12:34:08

+1

你不知道什麼時候用戶離線,ussaly沒有人點擊註銷btn ..需要像last_activity時間一些字段,並檢查此字段的狀態可能 – 2013-02-26 12:48:17

+0

何時更新此last_activity時間?你能解釋一下嗎?否則發佈一個新的答案.. – 2013-02-26 12:56:57

2

那麼首先你需要使用CookieStore以外的其他東西作爲你的會話後端。如果你使用ActiveRecord,你應該能夠相對容易地查詢所有當前登錄的用戶。

我不知道這個寶石,但這聽起來並不像你需要的那樣。

+0

是什麼?的CookieStore你能簡單地解釋一下嗎.. – 2013-02-26 09:09:45

+1

默認情況下,Rails將會話信息存儲在cookie中。意味着只有你知道你的會話數據,服務器除非客戶端通過這些信息才知道任何事情。這也意味着服務器不知道存在的所有cookie(即所有存在的會話),並且不可能對它們進行計數。 http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html – 2013-02-26 09:24:15

+0

雅。好主意..我在等待一些更多的答案,如果別人不適合我會接受你的答案。給予+1 – 2013-02-26 12:35:23

1

這真的取決於您用於登錄系統的哪個寶石。

如果使用Authlogic,我不記得確保所有被用戶模型創建的領域,但我相信你可以與搜索不喜歡在名字範圍界定和搜索last_request_at是在少於5-10分鐘。

如果您正在使用設計的,如果你特別想使用的寶石,你可以用這個嘗試: https://github.com/ctide/devise_lastseenable

相關問題