2013-03-27 51 views
2

何時在Rails應用程序中使用STI的正確時間?經過大量的閱讀(包括this excellent Railscast),我仍然不確定什麼是我的需求的最佳方法。如果模型可以同時是多個子類,STI是否合適?

這(做作)的例子說明了我的困境。

可以說一個用戶類可以分爲幾個子類,包括醫生和患者。這些不僅僅是簡單的角色,還有關鍵數據和邏輯差異。醫生具有某些數據庫字段(例如,資格,專業),某些查看邏輯(例如,if User.doctor? then顯示患者列表)以及某些邏輯和角色(例如可以管理患者記錄)。患者具有不同的數據庫字段(例如血型),查看邏輯(例如if User.patient? then顯示治療列表)和邏輯(例如可以編輯約會)。

醫生和患者都擁有:username, :email, :password共同字段,並且在應用程序的其餘部分(例如User has_many :comments, :messages, etc)中有相當多的邏輯。

從我的閱讀中,患者和醫生有不同的邏輯要求這一事實表明STI可能是合適的。但是對於不同的數據庫字段,多態可能是更好的方法。

但是......

用戶可能同時是博士和患者。

對這個問題有沒有「最佳方法」?

回答

1

STI使用單個列來確定對象的類型。

乍一看,這將表明你需要有用戶,醫生,病人,和DoctorPatient類,這對我來說,似乎有點糊塗。如果添加其他類型,它可能會變得更加循環。

移動醫生,患者等功能集成到另一個類(表)看起來像它會更有意義,而無需知道更多,但其他人可能有更多有用的投入。

+0

感謝您的建議。這肯定會解決這個問題的「差異」部分,但是醫生和患者之間也有很多相似之處:共享登錄和身份驗證,共享子模型等。我擔心這會導致應用中其他地方出現很多重複。欣賞你的想法 – 2013-03-27 23:34:21

+0

@AndyHarvey沒有什麼說'用戶'不能有關聯的'Doctor'模型(等等),或者決定(例如授權)不能依賴醫生的存在(或缺乏) /患者關聯。 – 2013-03-27 23:36:08

+0

是的,你是對的。我認爲,當我真正需要的只是一個擁有各種子模型的用戶時,我可能會想到STI,多態等等,從而使其過於複雜化。出於興趣,因爲這將是一對一的關係,您將如何在Rails中建立關係? – 2013-03-29 02:28:35

相關問題