2014-10-02 38 views
0

我想用Active Record在rails中實現繼承。我有3個型號:在軌道上實現了Ruby on Rails的Active Record繼承

  1. 所有者
  2. Realowner
  3. Legalowner

Realowner有2個屬性:名字和姓氏

和legalowner有2個屬性:移動和legalnumber

enter image description here

這兩個模型繼承自所有者。我嘗試在軌道中使用Active Record進行建模。對於這一點,我創建Ownertype屬性:

rails g model owner type:string 

,創造realownerlegalownerscaffold

rails g scaffold realowner name:string lastname:sting 
rails g scaffold legalowner mobile:string legalnumber:string 

Owner.rb

class Owner < ActiveRecord::Base 
end 

Realowner.rb

class Realowner < Owner 
end 

Legalowner.rb

class Legalowner < Owner 
end 

我在Rails項目實現這一點,但是當我要創建新的realownerlegalowner,我得到以下錯誤:

undefined method `name' for #<Realowner:0x00000005feff88> 
undefined method `lastname' for #<Realowner:0x00000005feff88> 
undefined method `mobile' for #<Legalowner:0x00000005feff88> 
undefined method `legalnumber' for #<Legalowner:0x00000005feff88> 

我解決由加載這個問題這個屬性在Owner模型中。當我創造新的Realowner,在所有者數據庫和其他領域的完整type, name and last name是空的,當我創造新的Legalowner,在擁有者數據庫和其他領域的完整type, mobile and legalnumber是空也和LegalownerRealowner在數據庫表都爲空。

我該如何在rails中使用Active Record實現這種繼承?我想在數據庫的特定表中添加類的屬性。我怎樣才能做到這一點?任何想法?

+0

https://stackoverflow.com/search?q=active+record+inheritance和https://stackoverflow.com/questions/2148853/active-record-inheritence – mhutter 2014-10-02 10:17:04

+0

什麼是你實際上是由您的設計繼承?這兩個人有不同的數據,因此在他們之間分享任何行爲都會很棘手。 – 2014-10-02 11:38:57

回答

0

Rails腳手架不支持繼承。因此,您需要編輯生成的模型並生成另一個遷移。

$ sed -i s/ActiveRecord::Base/Owner/ app/models/{realowner,legalowner}.rb 
$ rm db/migrate/*_create_{real,legal}owners.rb 
$ rails g migration AddFieldsToOwners name:string lastname:string mobile:string legalnumber:string 
+0

我想存儲特定數據中的數據,而不是在一個'Owner'表中。我更新問題並添加模型。 – mgh 2014-10-02 11:24:03

相關問題