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”的翻译,它没有名称冲突问题。但这一点很好!