我们使用简单的Ajax更新在Rails中实现了一个简单的聊天室功能。现在,在每个聊天室中,消息属于特定用户。我们想要显示用户列表(类似用户在场)。请提出建议。我们没有使用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
请提出建议
答案 0 :(得分:5)
要跟踪哪些用户在哪个房间,您可以在ChatRoom和用户模型之间设置HABTM关系。并且,您可以将last_poll_datetime列添加到User模型,以跟踪用户上次轮询消息的时间(一分钟内更多关于此部分的内容)。
要显示给定房间中所有用户的列表,请使用您的HABTM连接表ChatRooms_Users。每当用户加入或离开房间时,您都将从此表插入/删除。
如果您希望关闭浏览器的用户过期而不是点击“离开房间”,请设置清扫任务,以便每隔一分钟运行一次查找last_poll_datetime超过一分钟的用户,并从ChatRooms_Users连接表中删除他们的行。