Ruby on rails 如何在Rails 3中为多态关系建模

Ruby on rails 如何在Rails 3中为多态关系建模,ruby-on-rails,ruby-on-rails-3,activerecord,has-many,polymorphic-associations,Ruby On Rails,Ruby On Rails 3,Activerecord,Has Many,Polymorphic Associations,假设我有一个名为课程的模型,每个课程都有许多模块。然而,我希望模块是一个不同的类型范围 例如,模块模型将是父类,并且将有两个字段:标题和描述,这两个字段在所有类型的子类中都很常见 现在我需要课程能够有任意数量的幻灯片,视频,图像,文本实例,但是它们必须通过课程#模块检索 考虑每个子类类型都有自己的属性,例如,Video可以有一个url字段,而Text可以有内容 建立这种关联模型的正确方法是什么?我认为有两种选择(可能组合): 使用多态关联(参见示例)。您的迁移应该如下所示: create_ta

假设我有一个名为
课程
的模型,每个课程都有许多
模块
。然而,我希望模块是一个不同的类型范围

例如,
模块
模型将是父类,并且将有两个字段:
标题
描述
,这两个字段在所有类型的子类中都很常见

现在我需要
课程
能够有任意数量的
幻灯片
视频
图像
文本
实例,但是它们必须通过
课程#模块
检索

考虑每个子类类型都有自己的属性,例如,
Video
可以有一个
url
字段,而
Text
可以有
内容


建立这种关联模型的正确方法是什么?

我认为有两种选择(可能组合):

  • 使用多态关联(参见示例)。您的迁移应该如下所示:

    create_table :courses do |t|
      t.references :modules, :polymorphic => {:default => 'Text'}
    end
    
  • 使用单表继承:在这里,您的模型是从一个公共基类中派生出来的子类,这在数据库上是通过一个包含所有模型类的所有列的表来实现的


看一看关于2,和比较。我认为你应该使用多态关联,因为你的模块有很多不同的属性。

可能有点晚了,但是在你的应用程序中有一个名为“模块”的模型会导致各种各样的名称冲突问题…

这个问题似乎很相似,也许你会在这里找到一些有用的信息:谢谢Jules,但这是葡萄牙语“Modulos”的翻译,它没有名称冲突问题。但这一点很好!