何時在Rails應用程序中使用STI的正確時間?經過大量的閱讀(包括this excellent Railscast),我仍然不確定什麼是我的需求的最佳方法。如果模型可以同時是多個子類,STI是否合適?
這(做作)的例子說明了我的困境。
可以說一個用戶類可以分爲幾個子類,包括醫生和患者。這些不僅僅是簡單的角色,還有關鍵數據和邏輯差異。醫生具有某些數據庫字段(例如,資格,專業),某些查看邏輯(例如,if User.doctor? then
顯示患者列表)以及某些邏輯和角色(例如可以管理患者記錄)。患者具有不同的數據庫字段(例如血型),查看邏輯(例如if User.patient? then
顯示治療列表)和邏輯(例如可以編輯約會)。
醫生和患者都擁有:username, :email, :password
共同字段,並且在應用程序的其餘部分(例如User has_many :comments, :messages, etc
)中有相當多的邏輯。
從我的閱讀中,患者和醫生有不同的邏輯要求這一事實表明STI可能是合適的。但是對於不同的數據庫字段,多態可能是更好的方法。
但是......
用戶可能同時是博士和患者。
對這個問題有沒有「最佳方法」?
感謝您的建議。這肯定會解決這個問題的「差異」部分,但是醫生和患者之間也有很多相似之處:共享登錄和身份驗證,共享子模型等。我擔心這會導致應用中其他地方出現很多重複。欣賞你的想法 – 2013-03-27 23:34:21
@AndyHarvey沒有什麼說'用戶'不能有關聯的'Doctor'模型(等等),或者決定(例如授權)不能依賴醫生的存在(或缺乏) /患者關聯。 – 2013-03-27 23:36:08
是的,你是對的。我認爲,當我真正需要的只是一個擁有各種子模型的用戶時,我可能會想到STI,多態等等,從而使其過於複雜化。出於興趣,因爲這將是一對一的關係,您將如何在Rails中建立關係? – 2013-03-29 02:28:35