2

将一项体育赛事与两支球队联系起来,起初这似乎是有道理的:

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

是否有一种更清晰、更语义化的方式可以在活动记录中创建这些关联?还是这些解决方案之一是最佳选择?

谢谢

4

1 回答 1

2

您的解决方案很好,因为同一事件属于两个团队。当多个模型是可事件的时,多态关联是适用的。

于 2010-03-27T21:31:06.927 回答