Присутствие пользователя в чате (обновление чата простым опросом) - PullRequest
4 голосов
/ 01 апреля 2009

Мы реализовали простую функцию чата в 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

Модель USer:

class User < ActiveRecord::Base
  acts_as_authentic :crypto_provider => Authlogic::CryptoProviders::BCrypt
  validates_presence_of :nick
  validates_uniqueness_of :nick
  has_many :questions
  end

Пожалуйста, предложите способы

1 Ответ

5 голосов
/ 01 апреля 2009

Чтобы отслеживать, какие пользователи находятся в какой комнате, вы можете установить связь HABTM между моделями ChatRoom и User. И вы можете добавить столбец last_poll_datetime в модель User, чтобы отслеживать последний раз, когда пользователь опрашивал сообщения (подробнее об этом за минуту).

Чтобы отобразить список всех пользователей в данной комнате, используйте таблицу соединений HABTM ChatRooms_Users. Вы будете вставлять / удалять из этой таблицы всякий раз, когда пользователь присоединяется или покидает комнату.

Если вы хотите удалить пользователей, которые закрывают свои браузеры вместо того, чтобы нажимать «покидать комнату», настройте задачу очистки для запуска каждую минуту, которая ищет пользователей с last_poll_datetime старше одной минуты и удаляет их строки из таблицы присоединения ChatRooms_Users.

...