2010-11-25 14 views
5

私は、特定のユーザーのオンラインステータスを追加するアプリケーションを構築しています。Rails 3 + Devise:user_signed_in?データベース内の別のユーザーのために?

Deviseにはuser_signed_inというメソッドがありますか?アプリを使用しているユーザーがログインしているかどうかを確認するために組み込まれています。しかし、私はこのような別のユーザーのためにそれを使用しようとするとき:

user_signed_in?(user) 

user.user_signed_in? 

私は明らかに未定義のメソッドエラーを取得します。

Deviseにはこの方法がありますか、自分で作成する必要がありますか? 1つのアプローチは、特定のユーザーのオンラインステータスをユーザーモデルに保存することでした。 これに最適な解決策は何ですか?

答えて

1

私は工夫の作者ないんだけど、私はウォーデン/工夫を教えてくれませんどちらにログインしているユーザーを追跡することができるものから。

ユーザーテーブルのis_online列を有する問題はそれということです誰がウェブサイト上でアクティブであるかを見ることは困難です。私は、あなたのUserモデルにlast_seenという名前の列を日時として追加し、ユーザがページをリクエストするたびにDeviseでその列を更新します。 User.online_countメソッドを簡単に追加したり、過去5分間にユーザーがWebサイトにアクセスしたかどうかを確認することもできます。

+0

私も離れて、オンラインを作ることにより、2つを組み合わせることができ、オフライン状態。なぜなら、私は一定期間アクティブでないユーザーを「オフライン」と宣言したいという考えが好きではないからです。 – Max

+0

私はデータベースにすべてを保存しなければならないと思います。 – Max

+0

これはテストしていませんが、before_filterを使用してこれを実行できる可能性があります。 – voxobscuro

-3

routes.rbにdevise_for :userを使用してください。

18

私は自分のアプリケーションでDeviseを使用していて、初めて作業を始めたときと同じ問題を経験しました。ヘルパーメソッドを誤って使用しているだけです。あなたは、現在のユーザーがセッションを持っており、中に署名されているかどうかを確認したい場合は、次のようなヘルパーを使用します。

と本質的に同じ文です
if user_signed_in? 

:あなたの場合は

if !current_user.nil? && current_user.signed_in 

「ユーザーオブジェクトがで署名されているかどうかを確認したいとdは、その後、あなたはこれを呼び出します(ユーザーは、Userモデルオブジェクトである場合)

if user.signed_in? 
関連する問題