2011-10-26 33 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