【问题标题】:How do I implement class-table-inheritance in Rails?如何在 Rails 中实现类表继承?
【发布时间】:2012-07-03 18:37:30
【问题描述】:

我刚刚完成了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) 还是我走错了路?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    是的。 归结为这一点(在 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/

    【讨论】:

    • 谢谢,这个教程看起来和我想要的完全一样。
    【解决方案2】:

    有一个 gem 可以干净地做到这一点,它还支持 rails 5.1

    https://github.com/mvdamme/dbview_cti

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      相关资源
      最近更新 更多