在线列出用户

时间:2016-04-16 10:20:55

标签: ruby-on-rails

this问题中,我询问了如何在聊天中列出当前在线用户。在讨论时,我得到了answer,我试图实现它,但我没有成功。因此,我进行了迁移add_last_online_to_users last_online:datetime并在User模型中进行了调整:

user.rb

def self.online_now
  where ("last_online > ?", 15.minutes.ago)
end

然后添加到我的Message控制器中,以便每次用户发送消息时,他last_online更新Time.now。最后,我在application_controller添加了以下代码:

def show_online
  @users = User.online_now
end

并在我的视图中调用该方法:

<% @users.each do |user| %>
    <%= user.show_online %>
<% end %>

给我一​​个NoMethodError: undefined method 'each' for nil:NilClass

2 个答案:

答案 0 :(得分:3)

  

但是它返回了一个online_now列不存在的错误   数据库

您无法使用 方法 进行查询,因此@users = User.where(online_now: true)无效。相反,你必须这样做

def show_online
  @users = User.online_now
end

答案 1 :(得分:0)

您的代码没问题。 我认为你的观点和你的控制者/行动是不同的。这意味着你尝试将@users显示给另一个视图而不是&#34; show_online.html.erb &#34;

您的模型中只有语法错误

where ("last_online > ?", 15.minutes.ago)

应该是

where("last_online > ?", 15.minutes.ago)