在rails上的ruby中实现Active Record继承

时间:2014-10-02 10:09:58

标签: ruby-on-rails inheritance ruby-on-rails-4

我想在带有Active Record的rails中实现继承。我有3个型号:

  1. 所有者
  2. Realowner
  3. Legalowner
  4. Realowner有2个属性:name和lastname

    和legalowner有2个属性:mobile和legalnumber

    enter image description here

    这两个模型都继承自所有者。我尝试使用rails中的Active Record对其进行建模。为此,我使用Owner属性创建type

    rails g model owner type:string
    

    并使用realowner创建legalownerscaffold

    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时,在Owner数据库中完成type, name and last name并且其他字段为空,当我创建新的Legalowner时,在所有者数据库中完成type, mobile and legalnumber并且其他字段为空同样,数据库中的LegalownerRealowner表都是空的。

    如何在rails中使用Active Record实现此继承?我想在数据库中的特定表中添加类的属性。我怎样才能做到这一点?有什么想法吗?

1 个答案:

答案 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