ActiveRecord有两个关联

实现与activerecord有两个关联的最佳方法是什么?

我有团队和游戏模型。 每个团队都会有很多游戏@team.games 。 一场比赛将有两支球队@game.hosting_team@game.opposing_team

我开始时有两个belongs_to/has_one关联,但是@team.games只返回他们的主场比赛。

我能想到的另一个选择是使用HABTM并使用validation器来确保只有记录。 唯一缺少的就是跟踪主队。 似乎我需要一个很多通过协会,但我不完全确定…

谢谢你的帮助。

这是两个has_many关联的外观示例。 这里的问题是我必须打电话给team.gamesteam.opponents来获取他们游戏的完整列表

 class Team  "Team"#, :foreign_key => "" end class Game  "Team" #, :foreign_key => "team_id" belongs_to :opponent, :class_name => "Team" #, :foreign_key => "opponent_id" end 

我喜欢这样的东西,但这显然不是belongs_to的工作原理。

 class Team < ActiveRecord::Base has_many :games end class Game < ActiveRecord::Base belongs_to :hosting_team belongs_to :opposing_team end 

我想要的api看起来像这样。

 @team.games # return all games home or away @game.hosting_team # Team @game.opposing_team # Team 

您仍然可以使用bt / ho关联对其进行建模,并将游戏设置为团队中的访问者方法而不是关联:

 class Team < ActiveRecord::Base def games Game.find(:conditions => ["home_team_id = ? OR away_team_id = ?", id, id]) end end