为什么我得到ActiveRecord :: Relation对象?

时间:2011-04-01 08:48:36

标签: ruby-on-rails ruby-on-rails-3 rails-migrations

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

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

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

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

1 个答案:

答案 0 :(得分:13)

你得到它是因为你正在使用Lazy Loading。在调用某些对象或对象之前,没有任何内容被加载。

事实上,您的查询将返回一个对象数组:所有名称为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" ...]