2

我試圖讓其他模型繼承自其父模型,以及與第一個模型中的孩子有關聯的輔助類。這是我迄今爲止...Single Table Inheritance&ActiveRecord Associations

我用第一個命令來創建父模型。

rails g model Person name:string age:integer height:float 

我然後設置Person作爲父類,和兩個孩子類繼承它,如下圖所示。

class Person < ActiveRecord::Base 
    self.abstract_class = true 
end 

class Driver < Person 
    self.table_name = "Driver" 
    belongs_to :vehicle 
end 

class Passenger < Person 
    self.table_name = "Passenger" 
    belongs_to :vehicle 
end 

我還設置了一個Vehicle類與DriverPassenger兒童類關聯使用。

rails g model Vehicle color:string capacity:integer 

class Vehicle < ActiveRecord::Base 
    has_one :driver 
    has_many :passengers 
end 

但是,如果我用導軌控制檯並嘗試創建一個新的實例駕駛或乘客,使用Driver.newPassenger.new,我遇到一個PostgreSQL的錯誤。

由於我無法弄清楚的原因,Rails正在編寫SQL語句來查詢DriverPassenger表。但是,我的理解是,只有一個Person表已生成,並且具有用於查詢的type屬性。

如果有人可以在這裏提供一些指導,我會非常感激。

感謝

+0

你能告訴我們postgres錯誤嗎? –

+0

我試着運行'$ vehicle = Vehicle.new'和'$ vehicle.driver = Driver.create'。我已發佈[pastebin上的錯誤](http://pastebin.com/LbPi8Urv) –

回答

2

因爲它似乎你試圖使用公用表persons兩個DriverPassenger,你不需要abstract_class聲明,或任子類的table_name聲明。根據rails文檔,當你希望類從父類繼承行爲,而父類本身沒有表時,可以使用這些選項。

下面的代碼段應該可以正常工作。

class Person < ActiveRecord::Base 
end 

class Driver < Person 
    belongs_to :vehicle 
end 

class Passenger < Person 
    belongs_to :vehicle 
end 
+0

謝謝,本!這絕對有幫助。如果嘗試使用'Vehicle.driver'嘗試添加關聯,我仍遇到問題。有任何想法嗎? –

+0

這種情況下產生了什麼錯誤? –

+0

'$ vehicle = Vehicle.new'和'$ vehicle.driver = Driver.new'導致錯誤:'ActiveModel :: MissingAttributeError:不能寫未知屬性'vehicle_id'' –

相關問題