在将体育赛事与两支球队联系起来时,首先这似乎是有道理的:
events
- id:integer
- integer:home_team_id
- integer:away_team_id
teams
- integer:id
- string:name
但是我对如何在活动记录模型中将其链接起来感到困扰:
class Event
belongs_to :home_team, :class_name => 'Team', :foreign_key => "home_team_id"
belongs_to :away_team, :class_name => 'Team', :foreign_key => "away_team_id"
end
这是最好的解决方案吗?
在对similar question的回答中,我指向单表继承,然后发现多态关联。这两者似乎都不符合这种关联。也许我正在考虑这个错误,但我认为没有必要将一个团队子类化为主场和客场球队,因为区别仅在于比赛的场地。如果我确实使用单表继承,我不希望每个团队都属于一个事件,那么这会有效吗?
# app/models/event.rb
class Event < ActiveRecord::Base
belongs_to :home_team
belongs_to :away_team
end
# app/models/team.rb
class Team < ActiveRecord::Base
has_many :teams
end
# app/models/home_team.rb
class HomeTeam < Team
end
# app/models/away_team.rb
class AwayTeam < Team
end
对于我想要达到的目标来说,这似乎太过分了。
我还想到了一个关于has_many的关联,但这似乎有两个,因为我只需要两个团队,但这两个团队不属于任何一个事件。
event_teams
- integer:event_id
- integer:team_id
- boolean:is_home
在活动记录中制作这些关联是否有更清晰的语义方式?或者这些解决方案之一是最佳选择吗?
由于
答案 0 :(得分:2)
您的解决方案很好,因为同一事件属于两个团队。当多个模型可发生时,多态关联适用。