rails ActiveRecord在控制台中找到

use*_*970 6 activerecord ruby-on-rails ruby-on-rails-3

当我在Rails 3.2控制台中时,我可以做到这一点:

p = Person.last
p.last_name
Run Code Online (Sandbox Code Playgroud)

并打印姓氏.

但是当我试图通过id它找到它时,它能够找到单个记录并将其存储在我的变量中p,但我无法打印该last_name 列.例如:

p = Person.where(id: 34).limit(1)
Run Code Online (Sandbox Code Playgroud)

p这里打印显示所有列但是这样p.last_name

NoMethodError: undefined method `last_name' for
#<ActiveRecord::Relation:0x000000055f8840>
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

x1a*_*1a4 13

一个where查询将返回ActiveRecord::Relation,这有点类似数组行为,即使你限制返回的记录数.

如果您改为将查询更改为:

p = Person.where(id: 34).first
Run Code Online (Sandbox Code Playgroud)

它将按您的意愿工作,并且arel知道自动将查询限制为单个结果,因此您不必明确指定limit(1).

你也可以改为

p = Person.find(34) # Throws an ActiveRecord::RecordNotFound exception if Person with id 34 does not exist
Run Code Online (Sandbox Code Playgroud)

要么

p = Person.find_by_id(34) # Returns nil if Person with id 34 does not exist. Does *not* throw an exception.
Run Code Online (Sandbox Code Playgroud)

并且它将按预期返回单个记录.

编辑:其中查询返回ActiveRecord :: Relation,因为注释中提到的@mu太短.