Rails Devise,使用Onliner gem获取在线用户列表

时间:2015-07-27 13:00:51

标签: ruby-on-rails devise

我正在尝试使用onliner gem(https://github.com/kbokhonko/onliner)来显示当前在线用户的列表。但是,当我尝试查看列表应该在的页面时,我得到“未定义的方法`每个'为nil:NilClass”。请注意,如果我将“User.online”更改为“User.all”,则错误消息消失,我可以查看该页面,因此我的方法不是在错误的地方或类似的地方,我必须做错事在我的gem实现中。如果有人熟悉这个宝石可以解释我做错了什么,那就太好了!我确信这与我的def在线方法没有正确设置有关,但我不确定我会怎么写它。

users_controller.rb:

def online
  @users = User.online
end

online.html.erb:

<table>
  <thead>
    <tr>
      <th>Users Online</th>
    </tr>
  </thead>

  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td><%= user.email %></td>
        <td><%= user.user_type %></td>
        <% if user_signed_in? && current_user.user_type == 'admin' %>
        <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure you wish to delete this user?' } %></td>
        <% end %>
      </tr>
    <% end %>
  </tbody>
</table>

user.rb:

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :onliner

application_controller.rb:

before_filter { |c| current_user.track unless current_user.nil?}

1 个答案:

答案 0 :(得分:3)

你正在做的一切都是正确的,看起来onliner宝石中有一个错误。在您的情况下,User.online会返回nil而不是空数组。我建议你在gem repo中打开一个问题。或使用其他宝石。