2011-10-26 35 views
0

我有一個會議模型,其中多個參與者處於不同的角色(比如Tutor和Student)。現在,我有一個班級Participant,它具有屬性:具有兩個可能值(Tutor/Student)的類型。這兩種類型共享一些完全相同的方法。每個也有其自己的版本的其他方法。 (比如,安排一次會議的導師必須得到主任的批准)。 我用型重載處理的方法的差異:在Rails中創建新的類或重載類型

def make_appointment 
    do stuff 
    if type = "Tutor" 
    do something extra 
    end 
end; 

我猶豫着要不要走這條路,或者有兩個班,教師和學生繼承參與者類。

在決定採用何種方式實施時,我應該考慮哪些問題/陷阱?

謝謝。

回答

1

對於僅略微有選項不同,方法 - 建立在擴展點,繞過塊,以增強行爲等

幾乎每一次有通過類型比較實現類型相關的行爲,這不是一個好理念。

+0

謝謝戴夫。你能否給我提一些你提到的選項的例子?類型比較的缺點是什麼? – AdamNYC

+0

不足之處在於維護,並且將一些代碼設置爲面向對象而不是一些代碼的認知開銷。 –

+0

謝謝戴夫。你能不能指出一些我可以找到你提到的選項的參考資料? – AdamNYC

0

你應該使用一些授權寶石cancan這是最poular。

有一個關於基於角色的授權的簡短教程。 =>https://github.com/ryanb/cancan/wiki/Role-Based-Authorization

絕對可以將數據存儲在一個模型中。如果有許多不同的屬性,你可以使用多態關聯來擴展用戶模型,但在大多數情況下這是不需要的!

+0

嗨大衛,我用cancan進行授權,但我不確定如何在這種情況下應用它。你能詳細說明嗎? – AdamNYC