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 关联(参见示例
  • 多表继承(参见示例

我是一个 Rails 菜鸟,所以我很难评估哪种方法最适合这种情况。任何意见,将不胜感激!

4

1 回答 1

0

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

任何一种方法都是可行的,但是当我阅读此要求时,似乎最好使用 STI。STI 是 rails 中本机支持的功能,允许您在同一集合中查询和操作不同类型的资源。

于 2012-07-09T17:52:06.313 回答