我想把球队和他们的比赛储存在数据库里。有几支球队和几场比赛。每场比赛由两个队进行。
这是我的MySQL方案。
CREATE TABLE teams (
id INT(11) NOT NULL auto_increment,
name VARCHAR(255) NULL,
PRIMARY KEY (id),
UNIQUE KEY (name)
);
CREATE TABLE matches (
id INT(11) NOT NULL auto_increment,
datetime datetime NULL,
team_home INT(11) NOT NULL,
team_guest INT(11) NOT NULL,
result_home INT(11) NOT NULL,
guest_home INT(11) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (team_home) REFERENCES teams (id),
FOREIGN KEY (team_guest) REFERENCES teams (id)
);
现在我想在Rails中构建这些方案,但是我不知道如何选择正确的关联。如何在两个字段(在我的示例team_home和team_guest中)上进行引用?
最佳答案
就像@Sumit Munot说你应该通过指南,那里有很多好的信息
作为一个学习练习,尝试使用一些rails生成器来查看rails如何喜欢名为
rails generate model Team name:string
rails generate model Match start_at:datetime team_home_id:integer team_away_id:integer score_home_team:integer score_away_team:integer
然后根据需要查看和修改在
db/migrations
添加null: false
中创建的文件注意:我稍微更改了你的一些列名
拨号迁移后,使用
rake db:migrate
创建数据库表然后修改在
app/models
中生成的模型并添加关系class Team
has_many :home_matches, class_name: "Match", foreign_key: "team_home_id"
has_many :away_matches, class_name: "Match", foreign_key: "team_away_id"
def matches
(home_matches + away_matches).flatten.sort_by(:start_at)
end
end
class Match
belongs_to :home_team, class_name: "Match", foreign_key: "team_home_id"
belongs_to :away_team, class_name: "Match", foreign_key: "team_away_id"
end
正常的关联不需要这么复杂,假设你有一个玩家模型,即。
rails generate model Player name:string team_id:integer
class Player
belongs_to :team
end
class Team
has_many :players
end
只要
players
表有一个team_id
列,它就会“工作”关于mysql - 哪种类型的关联?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23022592/