Rails与(非activerecord)类(不是对象/行)的关联

时间:2016-12-27 15:24:21

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

问题:

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

例如:优等学位可以是学士学位或执照。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

那就是说,我会说你的要求很容易证明一个完整的ActiveRecord模型。对不同的学位类型使用单表继承,甚至只使用一个学位类,使用“&#39; name&#39;或者&#39;键入&#39;财产设置为&#39; bachelor&#39;等等。然后是每个度数类型的一个表行,has_many(或habtm如果它是n:m)与所需度数的自身关联。然后使用常规轨道关联(或者如果您使用STI变体的多态)来关联度数。

如果你根本不想要一张桌子,你也可以使用ActiveModel::Associations,但是你必须从代码创建不同的学位实例,这很麻烦。