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

问题描述 投票:6回答:1

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

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

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

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

ruby-on-rails ruby-on-rails-3 rails-migrations
1个回答
16
投票

您得到它,因为您正在使用延迟加载。在调用某些对象之前,什么也没有加载。

事实上,您的查询将返回一个对象数组:名称为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" ...]
© www.soinside.com 2019 - 2024. All rights reserved.