我有應用程序,其中用戶可以有幾個不同的配置文件之一。一些配置文件數據總是相同的(如姓名,性別等)。其他領域可能會有所不同(例如,醫生可以擁有關於他自己的許可證編號和文字,而患者可以擁有電話號碼等)。導軌和多個配置文件
我發現了一種方法,很適合,但仍有一些疑問。我的方法的要點如下:
用戶模型中包含了很多具體的系統數據,通過制定控制和
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