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