我有应用程序,其中用户可以有几个不同的配置文件之一。一些配置文件数据总是相同的(如姓名,性别等)。其他领域可能会有所不同(例如,医生可以拥有关于他自己的许可证编号和文字,而患者可以拥有电话号码等)。导轨和多个配置文件
我发现了一种方法,很适合,但仍有一些疑问。我的方法的要点如下:
用户模型中包含了很多具体的系统数据,通过制定控制和
has_one :person
Person模型包含常见的配置文件数据和
belongs_to :profile, :polymorphic => true
Doctor/Patient/Admin/etc包含更具体的配置文件数据和
has_one :person, :as => :profile
通过这种方法,我可以亲自模型简单检查:
def doctor? self.profile_type == 'Doctor' end
但有几件事情不给我休息一下。
首先是表现。这种方法需要大量额外的连接。例如,为了同时阅读医生的许可证号码,姓名和电子邮件,它将生成2个额外的连接。
第二个是针对个人资料模型(即Doctor)和个人/用户模型的不同ID。当ID = 1的用户与不同的ID具有Patient关系时,会出现这样的情况,但对于所有这些关联的模型具有相同的ID是合乎逻辑的。
也许你们会看到这种方法更多的陷阱?我的情况有没有更好的解决方案?
感谢您的回应!根据你的建议,多态对我来说仍然是最干净的方法。我不打算在用户同时拥有多个配置文件的情况下。但我同意,会有一些索引问题。看起来没有理想的解决方案。 – tipugin 2012-02-06 04:34:23
理想的解决方案是可以工作的,并且不会在将来给您带来麻烦,就这些! – tadman 2012-02-06 14:36:18