我正在尝试使用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?}
答案 0 :(得分:3)
你正在做的一切都是正确的,看起来onliner
宝石中有一个错误。在您的情况下,User.online
会返回nil
而不是空数组。我建议你在gem repo中打开一个问题。或使用其他宝石。