Présence de l'utilisateur Dans une salle de chat (discussion se mis à jour par vote simple requise)
-
22-08-2019 - |
Question
Nous avons mis en place une fonctionnalité simple forum de discussion Rails à l'aide des mises à jour simples Ajax. Maintenant, dans chaque salle de chat un message appartient à l'utilisateur particulier. Nous voulons montrer la liste des utilisateurs (quelque chose comme la présence des utilisateurs). S'il vous plaît suggérer des façons. Nous n'utilisons Jabber, XMPP, etc.
Le modèle Chatroom est:
class ChatRoom < ActiveRecord::Base
validates_presence_of :title
has_many :messages,:foreign_key=> "chat_room_id"
has_many :stories,:foreign_key=>"chat_room_id"
has_many :topics,:foreign_key=>"chat_room_id"
end
Les messages sont envoyés les chats de chaque utilisateur.
Le modèle de message est:
class Message < ActiveRecord::Base
belongs_to :user
end
Le modèle de l'utilisateur est:
class User < ActiveRecord::Base
acts_as_authentic :crypto_provider => Authlogic::CryptoProviders::BCrypt
validates_presence_of :nick
validates_uniqueness_of :nick
has_many :questions
end
S'il vous plaît suggérer des façons
La solution
Pour garder une trace dont les utilisateurs sont dans quelle pièce, vous pouvez configurer une relation HABTM entre les modèles chatroom et l'utilisateur. Et, vous pouvez ajouter une colonne de last_poll_datetime au modèle de l'utilisateur pour suivre la dernière fois que l'utilisateur sondé pour les messages (plus sur cette partie dans une minute).
Pour afficher une liste de tous les utilisateurs dans une pièce donnée, utilisez votre jointure HABTM table, ChatRooms_Users. Vous allez insérer / supprimer de ce tableau chaque fois qu'un utilisateur rejoint ou quitte une pièce.
Si vous voulez expireront les utilisateurs qui ferment leur navigateur au lieu de cliquer sur « salle de congé », mis en place une tâche balayeuse pour exécuter chaque minute qui recherche les utilisateurs last_poll_datetime plus d'une minute et enlever leurs rangs des ChatRooms_Users table de jointure.