在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
答案 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)