2

在 Rails 应用程序中使用 STI 的正确时间是什么时候?经过大量阅读(包括这篇优秀的 Railscast),我仍然不确定什么是满足我需求的最佳方法。

这个(人为的)例子说明了我的困境。

假设一个用户类可以分为几个子类,包括医生和病人。这些不仅仅是简单的角色,具有关键数据和逻辑差异。

医生具有某些数据库字段(例如,资格、专业)、某些视图逻辑(例如,if User.doctor? then显示患者列表)以及某些逻辑和角色(例如,可以管理患者记录)。

患者具有不同的数据库字段(例如血型)、视图逻辑(例如if User.patient? then显示治疗列表)和逻辑(例如可以编辑预约)。

Doctors 和 Patients 都有:username, :email, :password共同的领域,以及在应用程序的其余部分(例如,User has_many :comments, :messages, etc)中的大量逻辑。

根据我的阅读,患者和医生有不同的逻辑要求这一事实表明 STI 可能是合适的。但是对于不同的数据库字段,多态可能是更好的方法。

但....

用户可以同时是医生和患者。

有没有解决这个问题的“最佳方法”?

4

1 回答 1

1

STI 使用单个列来确定对象的类型。

乍一看,这表明您需要有 User、Doctor、Patient 和 DoctorPatient 类,对我来说,这似乎有点绕圈子。如果添加其他类型,它可能会变得更加循环。

将 Doctor、Patient 等功能移到另一个类(和表)中似乎更有意义,无需了解更多信息,但其他人可能有更有用的输入。

于 2013-03-27T23:19:06.617 回答