问题:
人们可能有多种类型的学位(学士,硕士,博士等)。 在我的国家,某些学位包括另一个学位。
例如:优等学位可以是学士学位或执照。
我想在类层次结构中创建这个结构:
Bachelor < Superior < Degree
Licentiate < Superior < Degree
Master < Degree
PHD < Degree
这些类不需要在数据库中存储行,但我想将它们与其他类的一些ActiveRecord对象相关联。
我应该只将类名存储为字符串吗?
答案 0 :(得分:1)
ActiveRecord
关联在类的实例之间工作,而不是类本身。如果您只需要一个指向特定类型度数的标记,则可以在具有度数的ActiveRecord
上使用ActiveRecord::Enum
属性。这将允许您按度数选择记录。
那就是说,我会说你的要求很容易证明一个完整的ActiveRecord模型。对不同的学位类型使用单表继承,甚至只使用一个学位类,使用“&#39; name&#39;或者&#39;键入&#39;财产设置为&#39; bachelor&#39;等等。然后是每个度数类型的一个表行,has_many
(或habtm
如果它是n:m)与所需度数的自身关联。然后使用常规轨道关联(或者如果您使用STI变体的多态)来关联度数。
如果你根本不想要一张桌子,你也可以使用ActiveModel::Associations
,但是你必须从代码创建不同的学位实例,这很麻烦。