【问题标题】:Rails association with a (non-activerecord) class (not a object/row)Rails 与(非活动记录)类(不是对象/行)的关联
【发布时间】:2016-12-27 15:24:20
【问题描述】:

问题:

人们可能拥有多种类型的学位(学士、硕士、博士等...)。 在我的国家,某些学位包括另一个学位。

例如:高级学位可以是学士或执照。

我想在类层次结构中创建这个结构:

Bachelor < Superior < Degree
Licentiate < Superior < Degree
Master < Degree
PHD < Degree

这些类不需要在数据库中存储行,但我想将它们与其他类的一些 ActiveRecord 对象相关联。

我应该将类名存储为字符串吗?

【问题讨论】:

  • 使用多态关联。
  • single table inheritence 是你的朋友
  • 我还没试过,但是多态不需要 {object}_id ? (我不会有)

标签: ruby-on-rails activerecord polymorphic-associations


【解决方案1】:

ActiveRecord 关联在类的实例之间起作用,而不是在类本身之间起作用。如果您只需要一个指向某种程度类型的标记,您可以在具有度数的ActiveRecords 上使用ActiveRecord::Enum 属性。这将允许您按度数选择记录。

也就是说,我想说您的要求很容易证明完整的 ActiveRecord 模型是合理的。对不同的学位类型甚至一个学位类使用单表继承,将“名称”或“类型”属性设置为“单身汉”等等。然后每个学位类型一个表行,具有has_many(或habtm,如果它是n:m)关联到自身以获得所需的学位。然后将使用常规的 rails 关联(如果使用 STI 变体,则使用多态关联)来关联度数。

如果你根本不需要表格,你也可以使用ActiveModel::Associations,但是你必须从代码中创建不同程度的实例,这很麻烦。

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多