我想在带有Active Record的rails中实现继承。我有3个型号:
Realowner有2个属性:name和lastname
和legalowner有2个属性:mobile和legalnumber
这两个模型都继承自所有者。我尝试使用rails中的Active Record对其进行建模。为此,我使用Owner
属性创建type
:
rails g model owner type:string
并使用realowner
创建legalowner
和scaffold
:
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项目中实现了这一点,但是当我想创建新的realowner
或legalowner
时,我会收到以下错误:
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
时,在Owner数据库中完成type, name and last name
并且其他字段为空,当我创建新的Legalowner
时,在所有者数据库中完成type, mobile and legalnumber
并且其他字段为空同样,数据库中的Legalowner
和Realowner
表都是空的。
如何在rails中使用Active Record实现此继承?我想在数据库中的特定表中添加类的属性。我怎样才能做到这一点?有什么想法吗?
答案 0 :(得分: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