AlexNikolaev94
AlexNikolaev94

Reputation: 1209

Listing users online

In this question I asked how to list out users currently online in the chat. While discussing I was given an answer, and I tried to implement it, but I didn't succeed. So, I made a migration add_last_online_to_users last_online:datetime and made a tweak in User model:

user.rb:

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

And then added to my Message controller, so that each time an user sends a message, his last_online updates to Time.now. Finally, I added to my application_controller the following code:

def show_online
  @users = User.online_now
end

and called that method in my view:

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

that returned me a NoMethodError: undefined method 'each' for nil:NilClass

Upvotes: 1

Views: 100

Answers (2)

thanhnha1103
thanhnha1103

Reputation: 1055

No problem with your codes. I think your view and your controller/action are different. It mean you try show @users to another view not "show_online.html.erb"

You just have a syntax error in your model

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

should be

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

Upvotes: 0

Pavan
Pavan

Reputation: 33542

But it returned me an error that online_now column doesn't exist in database

You cannot query with a method, so @users = User.where(online_now: true) won't work. Instead you have to do like below

def show_online
  @users = User.online_now
end

Upvotes: 3

Related Questions