使用Rails中的类型创建新类或重载

时间:2011-10-26 20:28:57

标签: ruby-on-rails ruby design-patterns

我有一个会议模型,有多个不同角色的参与者(比如,导师和学生)。现在,我有一个单独的参与者类,它具有属性:具有两个可能值的类型(Tutor / Student)。这两种类型共享一些完全相同的方法。每个都有自己的其他方法版本。 (例如,安排会议的导师必须得到导演的批准)。 我通过使用类型重载来处理方法的差异:

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

我不确定是这样走,还是有两个班,即继承参加者班级的导师和学生。

在决定实施此方法时,我应该考虑哪些问题/陷阱?

谢谢。

2 个答案:

答案 0 :(得分:1)

对于略有不同的方法,有选项 - 构建扩展点,传递块以增强行为等。

几乎每次通过类型比较实现与类型相关的行为时,都不是一个好主意。

答案 1 :(得分:0)

你应该使用像cancan那样最常用的授权宝石。

有一个关于基于角色的授权的简短教程。 => https://github.com/ryanb/cancan/wiki/Role-Based-Authorization

绝对可以将数据存储在一个模型中。如果有许多不同的属性,您可以使用多态关联来扩展用户模型,但在大多数情况下不需要这些属性!