1

我创建的应用程序允许用户创建课程并在课程中包含不同类型的资源(文档,视频,测验)。我很难找出建立课程与资源之间联系的最佳方法。多表继承与多态

现在,我有:

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

我是小白的轨道,所以我”很难评估哪种方法最适合这种情况。任何意见,将不胜感激!

回答

0

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

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