具有不同角色的 Rails Person 模型作为子类
Posted
技术标签:
【中文标题】具有不同角色的 Rails Person 模型作为子类【英文标题】:Rails Person model with different roles as subclass 【发布时间】:2016-08-09 09:48:56 【问题描述】:我正在使用 Ruby on Rails,但这个问题通常适用于应用程序/数据库模型设计。我想为多种类型的人建模,例如用户(可以登录的人)、员工和客户。其中每一个都有共同的属性,如姓名和电子邮件,应该是 Person 超类的一部分。每种类型还具有其他更具体的属性。一个人可以是这些角色中的一个或多个(某人既可以是员工也可以是客户)。
在代码中,适当的结构看起来像是超类/子类关系,但从数据库规范化的角度来看,应该有一个 Customer 表引用 Person 表的公共属性。
我需要决定如何结合这两种方法。
例如,我希望能够通过Customer.create(name: “Johnny Appleseed”, favorite_product: widget)
创建客户并查询Employee.where(email: “someone@company.com”)
,并避免在每个角色模型上重复人员字段。这样我就可以更改我对 Person 建模的方式,而无需使用相同的更改更新所有其他表。
【问题讨论】:
用户可以与客户和员工是同一个人吗?我认为您真的想拥有一张桌子,以便说明哪个人是员工、客户或两者兼而有之。 当你说“适当的结构看起来像超类/子类关系”时,你是在想Role
Person吗?
【参考方案1】:
如果你使用单表继承会更好。 你可以从本教程开始https://samurails.com/tutorial/single-table-inheritance-with-rails-4-part-1/
【讨论】:
以上是关于具有不同角色的 Rails Person 模型作为子类的主要内容,如果未能解决你的问题,请参考以下文章