多表继承与多态

时间:2012-07-09 17:45:22

标签: ruby-on-rails multiple-inheritance polymorphic-associations

我正在创建一个应用程序,允许用户创建课程并在课程中包含不同类型的资源(文档,视频,测验)。我很难找到在课程和资源之间建立联系的最佳方法。

现在,我有:

    class Course < AR::Base
      has_many :documents
      has_many :videos
      has_many :quizzes
    end

    class Document <AR::Base
      belongs_to :course
    end

    class Video <AR::Base
      belongs_to :course
    end

    class Quiz <AR::Base
      belongs_to :course
    end

文档,视频和测验都有一些共同的属性(例如,名称,描述),但也有许多不同的属性。我考虑使用STI并让它们从一个名为“Lessons”的类中继承。我决定不采用这种方法,因为我需要为每个类提供多个控制器。

最终,我希望能够对属于课程的所有资源执行操作,例如将所有文档,视频和测验列在一起,并将它们显示为可排序列表。

有关如何最好地设置此模型的任何建议。好像我可以用两种方式做到这一点:

  • 反向多态has_one关联(请参阅example
  • 多表继承(请参阅example

我是铁杆菜鸟,所以我很难评估哪种方法最适合这种情况。任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

  

最终,我希望能够对属于某个课程的所有资源执行操作,例如将所有文档,视频和测验列在一起,并将它们显示为可排序列表。

这两种方法都是可行的,但是当我阅读这个要求时,看起来你最好用STI。 STI是rails中本机支持的功能,允许您查询和操作同一集合中的不同类型的资源。