Присутствие пользователя в чате (чат обновляется путем простого опроса)
-
22-08-2019 - |
Вопрос
Мы реализовали простую функцию чата в Rails, используя обновления Simple Ajax.Теперь в каждом чате сообщение принадлежит конкретному пользователю.Мы хотим показать список пользователей (что-то вроде присутствия пользователя).Подскажите пожалуйста способы.Мы не используем Jabber, XMPP и т. д.
Модель чата:
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
Сообщения — это чаты, отправленные каждым пользователем.
Модель сообщения:
class Message < ActiveRecord::Base
belongs_to :user
end
Модель пользователя:
class User < ActiveRecord::Base
acts_as_authentic :crypto_provider => Authlogic::CryptoProviders::BCrypt
validates_presence_of :nick
validates_uniqueness_of :nick
has_many :questions
end
Подскажите пожалуйста способы
Решение
Чтобы отслеживать, какие пользователи в какой комнате находятся, вы можете настроить связь HABTM между моделями ChatRoom и User.Кроме того, вы можете добавить столбец Last_poll_datetime в модель User, чтобы отслеживать последний раз, когда пользователь опрашивал сообщения (подробнее об этой части через минуту).
Чтобы отобразить список всех пользователей в определенной комнате, используйте таблицу соединений HABTM ChatRooms_Users.Вы будете вставлять/удалять данные из этой таблицы всякий раз, когда пользователь присоединяется к комнате или покидает ее.
Если вы хотите истечь срок действия пользователей, которые закрывают свои браузеры вместо того, чтобы нажать «Покинуть комнату», настройте задачу очистки, которая будет запускаться каждую минуту, которая ищет пользователей с именем Last_poll_datetime старше одной минуты и удаляет их строки из таблицы присоединения ChatRooms_Users.