如何建模用户,教练关系?

时间:2012-09-13 20:03:18

标签: ruby-on-rails database-design activerecord model

在现实世界中,假设你有运动员和教练。

在模型中我有一个用户。用户是运动员。现在,用户也可以是任何其他用户的教练。你会如何以最好的方式对此进行建模?

我渴望:

@user.coach? =>真/假

@user.is_a_coach_of?(other_user) =>真/假

2 个答案:

答案 0 :(得分:1)

如果用户只能拥有一个教练,那么您可以将users表上的coach关联返回到users表。典型的例子是员工表,每个员工只有一位经理(CEO除外)。

class User
  has_one :coach, :class_name => "User"
  has_many :coachees, :foreign_key => :coach_id, :class_name => "User"

  def coach?
    0 < coachees.count
  end

  def is_a_coach_of?(other_user)
    coachees.include?(other_user)
  end
end

如果用户可以拥有许多教练,那么请使用教练表,其中包括字段,user_id(用于教练)和coachee_id,用于她教练的用户。

class Coach
  belongs_to :user
  belongs_to :coachee, :class_name => "User"
end

class User
  has_many coaches, :foreign_key => :coachee_id
  has_many coach_users, :through => :coachs, :source => :user
  has_many coachees, class_name => "Coach"
  has_many coachee_users, :through => :coachees, :source => :coachee

  def coach?
    0 < coachees.count
  end

  def is_a_coach_of?(other_user)
    coachee_users.include?(other_user)
  end
end

答案 1 :(得分:0)

我会有表格代表运动员和他们的教练之间的关系 - 每个运动员/教练关系的一行 - 其中教练和运动员ID都与用户数据相关。

CoachID | AthleteID

如果任何用户可以成为教练,那么这就是您所需要的,但如果您想限制“指导”给某些用户,请将“IsCoach”属性添加到用户表