2011-04-01 80 views
4

我試圖從數據庫汽車實例,爲什麼我得到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

回答

11

你明白了,因爲你正在使用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://stackoverflow.com/a/18203898/1608670 – 2015-03-29 17:23:36

相關問題