0

我有兩個模型類:汽車客戶新手:模型對象的訪問屬性

型號汽車

class car < ActiveRecord::Base 

    #car has attribute :town_code 

    has_many :customers 

end 

型號客戶

class customer < ActiveRecord::Base 
    # customer has attribute :first_name, :last_name 

    belongs_to :car 
end 

在我的控制器,我有以下代碼:

my_customer = Customer.find_all_by_first_name('John') 
p my_customer.last_name 
p my_customer.car_id 

但我得到no attribute 'car_id'錯誤,我也得到了no attribute 'last_name'錯誤

---問題1:---

我檢查我的數據庫,我有'car_id''姓氏' 我客戶列。爲什麼我不能以我的控制器代碼的方式訪問它們?

---問題2:---

但代碼:my_customer.map(&:car_id)正在訪問car_id,不過,我不太明白的代碼.map(&:car_id),它有什麼作用?任何人都可以向我解釋?

回答

2

你是不是能夠做到my_customer.last_name的原因是,my_customer這裏不是客戶,但客戶的數組,因爲你沒有find_all。這也是爲什麼my_customer.map(&:car_id)有效。這段代碼意味着什麼:對於數組my_customer中的每個對象,調用方法car_id並將結果插入到一個新數組中 - 並返回該新數組。

如果客戶屬於汽車,則需要在客戶表(它對應於汽車表中的id列)中的car_id。此外,你不應該在汽車表中,而是在客戶表中的姓氏。

聽起來好像您可能需要退後一步並更好地瞭解ActiveRecord associations。無論如何,我不清楚爲什麼顧客會屬於汽車。

+0

嗨,那是我的錯字,當我說我在'car'表中有car_id和last_name時,實際上他們在'customer'表中。這只是我的錯字。我主要關心代碼「.map(&:car_id)」,它有什麼作用? – Mellon

+0

「&」在.map(&:car_id)中的含義是什麼?只意味着調用該方法? – Mellon

+0

'map'需要一個塊,它會爲集合中的每個項目運行,所以您通常會執行像'my_array.map {| item | item.car_id}'這樣的操作。 '&'將一個方法變成一個塊;基本上你現在傳入一個由「調用方法」組成的塊。這基本上是一條捷徑。 –