将一项体育赛事与两支球队联系起来,起初这似乎是有道理的:
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
这是最好的解决方案吗?
在对类似问题的回答中,我被指向单表继承,然后发现了多态关联。两者似乎都不适合这种关联。也许我看错了,但我认为没有必要将一支球队分为主队和客队,因为区别只在于比赛的进行。如果我确实使用单表继承,我不希望每个团队都属于一个事件,那么这会起作用吗?
# 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
是否有一种更清晰、更语义化的方式可以在活动记录中创建这些关联?还是这些解决方案之一是最佳选择?
谢谢