将ActiveRecord :: Relation转换为模型

Nic*_*ett 8 ruby-on-rails

非常初学的问题.我正在使用Rails 3的查询界面,如下所示:

class User < ActiveRecord::Base

def self.authenticate
 if Rails.env = 'development'
   self.where('username = ?', 'development_user')
 else
   self.where('username = ?', request.env['REMOTE_USER'])
 end
end

end
Run Code Online (Sandbox Code Playgroud)

这是返回一个ActiveRecord :: Relation对象,实际上我想要与查询相关的User对象.如何将其转换为User对象?

Chr*_*ald 13

你需要"提交"查询与all,firstfind.

def self.authenticate
 user = Rails.env.development? ? "development_user" : request.env['REMOTE_USER']
 self.where('username = ?', user).first
end
Run Code Online (Sandbox Code Playgroud)

  • 请注意,似乎在Rails4中使用'all'和'where(..)'已弃用.当我在最新版本的Rails上尝试它时,我收到了这样的警告:DEPRECATION WARNING:不推荐使用Relation#all.如果你想加载一个关系,你可以调用#load(例如`Post.where(published:true).load`).如果要从关系中获取记录数组,可以调用#to_a(例如`Post.where(published:true).to_a`).(从(irb)的irb_binding调用:39) (2认同)