【发布时间】:2016-04-04 08:06:41
【问题描述】:
我正在编写一个简单的聊天,我需要列出在线用户。我不使用devise 进行身份验证,有一个自定义的user 模型通过omniauth 进行身份验证。
user.rb
class User < ActiveRecord::Base
has_many :messages, dependent: :delete_all
class << self
def from_omniauth(auth)
provider = auth.provider
uid = auth.uid
info = auth.info.symbolize_keys!
user = User.find_or_initialize_by(uid: uid, provider: provider)
user.name = info.name
user.avatar_url = info.image
user.profile_url = info.urls.send(provider.capitalize.to_sym)
user.save!
user
end
end
end
application_controller.rb
def current_user
@current_user ||= User.find_by(id: cookies[:user_id]) if cookies[:user_id]
end
helper_method :current_user
我试图这样做:添加到application_controller.rb show_online 方法:
def show_online
@users = User.where(status: online)
end
helper_method :online_users
然后添加到视图中:
<%= online_users.each do |user| %>
<ul>
<li><%= user.name %></li>
</ul>
<%end%>
但它会抛出异常ActionView::Template::Error (undefined method 'online_users' for #<MessagesController:0x007f52d7f82740>)
编辑
我找到了here 对我来说最好的解决方案,但我完全不知道如何正确实现它:( 但这绝对是我需要的
【问题讨论】:
-
可能
Users.find(:all, :conditions => ["status = ?", "online"])返回 nil 这就是原因。 -
不要引用我的话,但我很确定你使用的这个 find 语法很久以前就被删除了。还提供适当的错误消息。它应该告诉你什么对象没有每个方法,这对调试很有帮助。
-
@2call-chaos 它返回
ActionView::Template::Error (undefined method 'each' for nil:NilClass) -
@AlexNikolaev94 这是因为 find 方法需要一个 ID 来查找一条记录(我猜你没有 ID
:all)。请在此处查找文档guides.rubyonrails.org/active_record_querying.html -
你检查我的帖子你使用我提到的可能性吗@AlexNikolaev94
标签: ruby-on-rails ruby-on-rails-4