2016-04-16 27 views
0

我正在构建一个小型实时聊天,我坚持在线列出用户。我有一个自定义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.rbEDITED

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.rbEDITED

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类中删除selfonline_now方法,有人告诉我,现在有在我看来是没有undefined method错误,但仍然没有用户在线:(

回答

1

看来你是不节能last_online属性在sessions_controller.rb中,只是分配值。请尝试以下方法:

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中的内容相同。试着用current_user.update_attributes(last_online: Time.now)

+1

有帮助,谢谢!但它仍然不显示用户在线视图:( – AlexNikolaev94

+0

我猜,last_online现在存储到数据库。User.online_now'返回用户在轨道控制台? –

+0

抱歉,迟到的响应!我通过控制台检查,它返回'未定义的方法'online_now'用户'在我的问题,我提供了整个'用户'模型 – AlexNikolaev94

1

更换current_user.last_online = Time.now既然你已经使用户静态与“类< <自我”,它可能会导致你所定义的方法,自冗余故障的方法。在online_now的声明中尝试没有“自我”。

+0

谢谢!现在在控制台中,我发现'用户''online_now',但仍然没有用户在线视图:((( – AlexNikolaev94