0

想象一下,我有一个名为Course的模型,每个课程has_many Modules。不过,我希望模块是不同类型的范围。如何在Rails 3中建立多态has_many关系

例如,Module模型将是父类,将有两个字段:titledescription,这将是通用在所有类型的孩子。

现在我需要Course能够有任意数量的SlideshowVideoImageText实例,但他们必须通过Course#modules进行检索。

考虑每个子类类型都有自己的属性,如Video可以有一个url场,而Text可能有contents,例如。

建立此关联的正确方法是什么?

+0

这个问题似乎是相似的,也许你会发现一些有用的信息在这里:http://stackoverflow.com/questions/3209322/rails-polymorphic-has-many –

回答

0

我认为有2个选项(可能的组合):

  • 使用多态关联(见"Polymorphic Associations"为例)。迁移应该是这样的:

    create_table :courses do |t| 
        t.references :modules, :polymorphic => {:default => 'Text'} 
    end 
    
  • 使用单表继承:有你的模型是从公共基类的子类,这是唯一一个包含所有列的所有模型类表实现对数据库。

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

1

这可能是有点晚了,但在你的所谓的“模块”应用模式将引发各种与名称冲突的问题......

+0

谢谢朱尔斯,但这是从葡萄牙语“Modulos”没有名称冲突问题的翻译。但好点! – kolrie