我试图从数据库中获取汽车实例,
theCar = Car.where(:name => 'TOYOTA')
puts theCar.user_name
我收到错误消息:ActiveRecord::Relation:0xb6837b54 的未定义方法 `user_name'
为什么我得到一个ActiveRecord::Relation对象,而不是Car对象?可能是什么原因?顺便说一句,我在我的迁移文件中查询了汽车。我正在使用 Rails 3。
我试图从数据库中获取汽车实例,
theCar = Car.where(:name => 'TOYOTA')
puts theCar.user_name
我收到错误消息:ActiveRecord::Relation:0xb6837b54 的未定义方法 `user_name'
为什么我得到一个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" ...]