在现实世界中,假设你有运动员和教练。
在模型中我有一个用户。用户是运动员。现在,用户也可以是任何其他用户的教练。你会如何以最好的方式对此进行建模?
我渴望:
@user.coach?
=>真/假
@user.is_a_coach_of?(other_user)
=>真/假
答案 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”属性添加到用户表