2012-03-27 156 views
0

比方說,我有一個汽車和驅動程序數據庫,但對於某些記錄,沒有汽車司機。我如何映射關係?Rails - 數據庫關係

這裏是我的代碼,它會導致「NoMethodError:未定義的方法`每個」近親:NilClass」的錯誤

class Car < ActiveRecord::Base 
    has_one :driver, :foreign_key => :dr_code, :primary_key => :ca_master_code 
end 

class Driver < ActiveRecord::Base 
    belongs_to :car, :foreign_key => :dr_code, :primary_key => :ca_master_code 
end 

請指教。

+0

順便說一句,有什麼理由你不遵循Rails列命名約定? – 2012-03-27 19:50:33

+0

我正在使用傳統數據庫。 – oprogfrogo 2012-03-27 20:15:09

回答

1

假設在這種情況下nil表示那裏沒有司機。這不是一個數據庫設計問題。

如果沒有駕駛員的汽車是有效的情況(而不是創建記錄中的錯誤),那麼只需處理nil的情況。

+0

感謝您的回覆。我期望Active Record將沒有驅動程序的那些返回爲零,但是它會拋出一個我無法拯救的異常。沒有rails有'has_one_or_none'類型的關係嗎? – oprogfrogo 2012-03-27 19:54:29

+0

那麼,你在一個'nil'對象上調用'.each',它總是會拋出一個異常。你不需要從中解救;在嘗試調用它上面的'each'之前,只需檢查它是否爲'nil'。 – jefflunt 2012-03-27 21:01:04

0

實際上,Rails做得非常好。我假設你在car.driver上打電話each。由於該車沒有司機,car.drivernilnil.each barfs。

+0

順便說一句,你爲什麼要在has_one關係中調用'each'? – 2012-03-27 19:53:07

+0

每個人都被稱爲我相信由於在查詢中使用include執行'find_all'。 Car.find_all_by_ca_active('Y',:include => [:driver])。在控制檯中執行該查詢會返回該錯誤。我在這裏做錯了什麼? – oprogfrogo 2012-03-27 20:17:09

+0

'Car.find_all_by_ca_active('Y')'沒有:include?的輸出是什麼? – 2012-03-27 20:33:14