我有一个会议模型,有多个不同角色的参与者(比如,导师和学生)。现在,我有一个单独的参与者类,它具有属性:具有两个可能值的类型(Tutor / Student)。这两种类型共享一些完全相同的方法。每个都有自己的其他方法版本。 (例如,安排会议的导师必须得到导演的批准)。 我通过使用类型重载来处理方法的差异:
def make_appointment
do stuff
if type = "Tutor"
do something extra
end
end;
我不确定是这样走,还是有两个班,即继承参加者班级的导师和学生。
在决定实施此方法时,我应该考虑哪些问题/陷阱?
谢谢。
答案 0 :(得分:1)
对于略有不同的方法,有选项 - 构建扩展点,传递块以增强行为等。
几乎每次通过类型比较实现与类型相关的行为时,都不是一个好主意。
答案 1 :(得分:0)
你应该使用像cancan
那样最常用的授权宝石。
有一个关于基于角色的授权的简短教程。 => https://github.com/ryanb/cancan/wiki/Role-Based-Authorization
绝对可以将数据存储在一个模型中。如果有许多不同的属性,您可以使用多态关联来扩展用户模型,但在大多数情况下不需要这些属性!