我是一名铁杆新手,我正在尝试创建一个如下所示的数据库架构:
有很多比赛。每场比赛有2支球队。
一支球队有很多比赛。
团队模型和匹配模型通过竞赛表连接在一起。
我的竞赛模型有match_id,team1_id和team2_id。
但我不知道如何完成这项工作,或者它是否是最好的方法。我不知道如何让某些团队team1和其他team2 ....两个外键?那可能吗?
匹配表还需要保存其他数据,如team1_points和team2_points,赢家和输家等。
答案 0 :(得分:2)
您可以在表格中包含任意数量的外键。我写了一个应用程序,涉及安排团队在游戏中玩。
我在Game类中使用以下方法处理此问题的方式:
class Game < ActiveRecord::Base
belongs_to :home_team, :class_name => 'Team', :foreign_key => 'team1_id'
belongs_to :visitor_team, :class_name => 'Team', :foreign_key => 'team2_id'
您可以为team1_points,team2_points等添加适当的字段。您需要使用以下内容设置您的团队模型:
class Team < ActiveRecord::Base
has_many :home_games, :class_name => 'Game', :foreign_key => 'team1_id'
has_many :visitor_games, :class_name => 'Game', :foreign_key => 'team2_id'
def games
home_games + visitor_games
end
#important other logic missing
end
请注意,我的一些命名约定是必须使用旧数据库的结果。
答案 1 :(得分:1)
我遇到了类似的问题,并扩展了之前的答案,我所做的是:
class Game < ActiveRecord::Base
def self.played_by(team)
where('team1_id = ? OR team2_id = ?', team.id, team.id)
end
end
class Team < ActiveRecord::Base
def games
@games ||= Game.played_by(self)
end
end
这样,Team#games
会返回ActiveRecord::Relation
而不是Array
,因此您可以继续链接其他范围。