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

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

问题描述:

我试图从数据库汽车实例,为什么我得到ActiveRecord :: Relation对象?

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

我得到的错误信息:未定义的方法`USER_NAME”的 的ActiveRecord ::关联:0xb6837b54

为什么我得到ActiveRecord的: :关系对象,而不是汽车对象??可能是什么原因?顺便说一下,我查询了我的移植文件中的汽车。我正在使用Rails 3.

+3

请注意,Ruby是不是一个驼峰的语言。使用'the_car',而不是'theCar'。 – 2011-04-01 09:00:16

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

事实上,您的查询将返回一个对象数组:所有名称为TOYOTA的汽车。如果你知道,世界上只有一个与这个名字的车,你可以这样做:

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" ...] 
+2

在Rails 4中,'SomeModel.where(something:true).all'是**弃用**。改用'.to_a'。更多信息:http://*.com/a/18203898/1608670 – 2015-03-29 17:23:36