在将一项体育赛事与两支球队联系起来时,起初这似乎是有道理的:
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
对于我想要实现的目标来说,这似乎是太多的工作了。
我也考虑过一个有很多通过协会,但这似乎是两个,因为我只需要两个队,但这两个队不属于任何一个事件。
event_teams
- integer:event_id
- integer:team_id
- boolean:is_home
在活动记录中,是否有更清晰、更语义化的方法来建立这些关联?还是这些解决方案中的一个是最佳选择?
谢谢