【发布时间】:2017-09-12 00:08:16
【问题描述】:
我的目标:
我正在尝试使用不同的个人资料创建两种不同类型的用户。
Barber、Client、BarberProfile 和 ClientProfile
我的基础 User 对象包含 email、password 等信息,以及 Devise 跟踪的所有其他字段。
我希望基本User 模型有一个Profile,它可以跟踪我希望所有用户拥有的所有基本信息。比如first_name、last_name、avatar等。
我正在使用单表继承来创建两种不同类型的用户:Client 和 Barber。
我希望这些类型的用户中的每一个都有一个与之关联的基本Profile,然后分别拥有属于BarberProfile 和ClientProfile 的附加字段。
BarberProfile 将拥有 Barber 需要的东西,但 Client 没有。例如,bio。 ClientProfile 将拥有 Client 需要的东西,但 Barber 没有。例如,hair_type。
我目前有什么,以及我的问题:
如上所述,我为User 和Profile 创建了一个表。所以我可以打电话给user.profile.first_name。我创建了一个BarberProfile 和ClientProfile 表以添加额外的字段。
如果用户类型是Barber,我希望能够引用user.profile.bio。但是bio 不是基本配置文件的一部分。所以在这种情况下,我必须创建一个关联的Profile and 和关联的BarberProfile 来获得我需要的一切。我可以只做user.profile.first_name 和user.barber_profile.bio,但感觉很乱,而且我正在从本质上相同类型的模型中进行两种不同的关联。我觉得让BarberProfile 从Profile 继承所有字段并在顶部添加自己特定的Barber 字段应该是一件简单的事情。
如何在 Rails 中做到这一点?
编辑:我想这样做的主要原因之一是我可以在同一表单中为Barber 更新first_name 和bio 之类的内容。同样,first_name 和 hair_type 在同一表单中用于 Client。
【问题讨论】:
标签: ruby-on-rails inheritance database-design associations single-table-inheritance