Rails具有不同角色的人员模型作为子类

时间:2016-04-17 18:47:45

标签: ruby-on-rails database-design composition subclassing user-roles

我正在使用Ruby on Rails,但这个问题一般适用于应用程序/数据库模型设计。我想为许多类型的人建模,例如User(可以登录的人),Employee和Customer。它们中的每一个都具有公共属性,如名称和电子邮件,它们应该是Person超类的一部分。每种类型还具有其他更具体的属性。人员可以是这些角色中的一个或多个(某人可以是雇员和客户)。

在代码中,适当的结构看起来像一个超类/子类关系,但从数据库规范化的角度来看,应该有一个Customer表引用Person表的公共属性。

我需要决定如何将这两种方法结合起来。

例如,我希望能够通过Customer.create(name: “Johnny Appleseed”, favorite_product: widget)创建一个Customer并查询Employee.where(email: “someone@company.com”),并避免在每个角色模型上复制Person字段。这样我就可以改变我为Person建模的方式,而无需使用相同的更改来更新所有其他表。

1 个答案:

答案 0 :(得分:0)

如果使用单表继承,那会更好。 您可以从本教程https://samurails.com/tutorial/single-table-inheritance-with-rails-4-part-1/

开始