Rails与第三方关系定义的多个角色

时间:2011-11-05 04:48:42

标签: ruby-on-rails design-patterns inheritance single-table-inheritance

我正在构建一个小应用程序,其中包含用户,学生,导师,会议等课程。

每个用户可以在一次会议中担任导师,但在另一次会议中可以是学生。我一直在考虑如何建模这些关系。

现在,我有一个用户模型,一个单独的参与者模型,其属性为Role =“tutor”/“student”。导师和学生使用单表继承扩展参与者,属于会议。

但是,我想知道这是不是一个好的设计。 (这似乎对我来说不直观)。

在我的情况下你会做什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

这是可以接受的,但还有其他更清洁的方法。您可以像这样设计Meeting模型:

has_and_belongs_to_many :users, :as => :studens
belongs_to :tutor, :foreign_key => 'tutor_id', :class_name => 'User'

您的User型号:

has_and_belongs_to_many :meetings, :as => :meetings_taken
has_many :meetings_given, :foreign_key => 'tutor_id', :class_name => 'Meeting'

所以你只需要两个模型。

//编辑

建议,接受,拒绝......我会创建一个Invitation模型user_id:integer(邀请用户),meeting_id(通过这个你知道谁可以邀请其他人,因为会议属于导师),status:string(等待,接受,接受可能是选项)也许explaination:text(当有人擅长时)。