我正在构建一个小型实时聊天,我坚持在线列出用户。我有一个自定义User
模型,并在列表中列出在线用户列表,我进行了迁移add_last_online_to_users last_online:datetime
。然后,在我的user.rb
:用户的last_online属性保持为'nil`
EDITED
class User < ActiveRecord::Base
has_many :messages, dependent: :delete_all
class << self
def from_omniauth(auth)
provider = auth.provider
uid = auth.uid
info = auth.info.symbolize_keys!
user = User.find_or_initialize_by(uid: uid, provider: provider)
user.name = info.name
user.avatar_url = info.image
user.profile_url = info.urls.send(provider.capitalize.to_sym)
user.save!
user
end
def online_now
where("last_online > ?", 15.minutes.ago)
end
end
end
在application_controller.rb
:
def show_online
@users = User.online_now
end
在sessions_controller.rb
EDITED:
def create
user = User.from_omniauth(request.env["omniauth.auth"])
cookies[:user_id] = user.id
user.update_attributes(last_online: Time.now)
end
在messages_controller.rb
EDITED:
def create
respond_to do |format|
if current_user
@message = current_user.messages.build(message_params)
@message.save
current_user.update_attributes(last_online: Time.now)
format.html{redirect_to root_path}
format.js
else
format.html{redirect_to root_path}
format.js {render nothing: true}
end
end
end
最后的观点:
<ul>
<%= @users.each do |user| %>
<li><%= user.name %></li>
<% end %>
</ul>
编辑 但是,当我登录或发送控制台消息后,检查 - 有没有在列出的用户查看,当我尝试在控制台上呼叫User.online_now
时,它会返回undefined method 'online_now' for User
ANOTHER编辑 我User
类中删除self
从online_now
方法,有人告诉我,现在有在我看来是没有undefined method
错误,但仍然没有用户在线:(
有帮助,谢谢!但它仍然不显示用户在线视图:( – AlexNikolaev94
我猜,last_online现在存储到数据库。User.online_now'返回用户在轨道控制台? –
抱歉,迟到的响应!我通过控制台检查,它返回'未定义的方法'online_now'用户'在我的问题,我提供了整个'用户'模型 – AlexNikolaev94