2016-04-16 26 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