为什么我得到ActiveRecord :: Relation对象?
问题描述:
我试图从数据库汽车实例,为什么我得到ActiveRecord :: Relation对象?
theCar = Car.where(:name => 'TOYOTA')
puts theCar.user_name
我得到的错误信息:未定义的方法`USER_NAME”的 的ActiveRecord ::关联:0xb6837b54
为什么我得到ActiveRecord的: :关系对象,而不是汽车对象??可能是什么原因?顺便说一下,我查询了我的移植文件中的汽车。我正在使用Rails 3.
答
你明白了,因为你正在使用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
请注意,Ruby是不是一个驼峰的语言。使用'the_car',而不是'theCar'。 – 2011-04-01 09:00:16