将多个ActiveRecord`instry_to`指向同一个类是否可以?

时间:2010-03-27 19:51:57

标签: ruby-on-rails activerecord associations single-table-inheritance

在将体育赛事与两支球队联系起来时,首先这似乎是有道理的:

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

在活动记录中制作这些关联是否有更清晰的语义方式?或者这些解决方案之一是最佳选择吗?

由于

1 个答案:

答案 0 :(得分:2)

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