【问题标题】:How do I model a polymorphic has_many relationship in Rails 3如何在 Rails 3 中建模多态 has_many 关系
【发布时间】:2011-11-06 04:42:55
【问题描述】:

假设我有一个名为 Course 的模型,每门课程都有_many Modules。但是我希望模块是不同的类型。

例如,Module 模型将是父类,并且有两个字段:titledescription,这在所有类型的子类中都很常见。

现在我需要Course 才能拥有任意数量的SlideshowVideoImageText 实例,但是它们必须通过Course#modules 检索。

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

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

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 activerecord has-many polymorphic-associations


【解决方案1】:

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

【讨论】:

  • 感谢 Jules,但这是葡萄牙语“Modulos”的翻译,没有名称冲突问题。但好点!
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多