如何在Rails中实现类表继承?

时间:2012-07-03 18:37:30

标签: ruby-on-rails class-table-inheritance

我刚刚完成了本书 Agile Web Development with Rails ,第四版(http://pragprog.com/book/rails4/agile-web-development-with-rails),并需要一些帮助来理解如何创建父子关系楷模。我做了一些谷歌搜索并在StackOverflow上进行了搜索,并且总体上了解了单表继承和类表继承。

我有一堆关于档案馆藏中不同项目的元数据。大多数元数据对于所有对象是相同的,例如,登录号,标题,描述,版权等。除了公共元数据之外,还存在仅适用于某些类型的项目的元数据,例如,照片需要保持跟踪物品是彩色还是黑白;录音需要跟踪格式(CD,DAT,盒式磁带等)和持续时间;文本材料需要跟踪页数;等

       Class hierarchy

            Item
              |
  +-----------+------------+
  |           |            |
Photo   SoundRecording    Text

由于我将拥有数千条记录,因此我将单表继承视为效率太低。我理解这里提到的类表继承的想法:http://martinfowler.com/eaaCatalog/classTableInheritance.html但我对如何在一个新的Ruby on Rails项目中实际实现它感到困惑。我是否将类表继承实现为多态关联(http://guides.rubyonrails.org/association_basics.html#polymorphic-associations)或我是否在错误的轨道上?

谢谢。

2 个答案:

答案 0 :(得分:6)

是。 归结为此(在Rails 3中)

class Business < ActiveRecord::Base
  belongs_to  :biz, :polymorphic => true
end

class Restaurant < ActiveRecord::Base
  acts_as_biz
end

这是一个关于如何做的非常好的教程。

http://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/

答案 1 :(得分:0)

有一个宝石可以干净利落地完成它,它还支持rails 5.1

https://github.com/mvdamme/dbview_cti