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

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

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


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

最佳答案

之所以得到它,是因为您正在使用延迟加载。在调用某些对象之前,不会加载任何内容。

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

关于ruby-on-rails - 为什么我得到一个ActiveRecord::Relation对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5511068/

10-08 22:59