7

我试图从数据库中获取汽车实例,

theCar = Car.where(:name => 'TOYOTA')
puts theCar.user_name

我收到错误消息:ActiveRecord::Relation:0xb6837b54 的未定义方法 `user_name'

为什么我得到一个ActiveRecord::Relation对象,而不是Car对象?可能是什么原因?顺便说一句,我在我的迁移文件中查询了汽车。我正在使用 Rails 3。

4

1 回答 1

18

你得到它是因为你正在使用延迟加载。在您调用某个或多个对象之前没有加载任何内容。

事实上,您的查询将返回一个对象数组:名称为 TOYOTA 的所有汽车。如果您知道只有一个具有此名称的 CAR,您可以执行以下操作:

theCar = Car.where(:name => 'TOYOTA').first
# or
theCar = Car.first(:name => 'TOYOTA')
# or
theCar = Car.find_by_name('TOYOTA')

如果有很多名为 TOYOTA 的汽车:

theCars = Car.where( :name => "TOYOTA" ).all
theCars.map(&:user_name)
#=> ["Jhon", "Paul" ...]
于 2011-04-01T08:52:16.367 回答