对 Rails 非常陌生,管理过一些简单的项目,但现在正在涉足更复杂的表之间的关联,并希望得到一些帮助。
该场景最好与体育比赛相关。假设我们有
1) 一个团队(有_许多玩家)
2) 一个玩家(belongs_to team)
3) 一场比赛——现在变得棘手了。
一场比赛将有: 2 支球队和 22 名球员(每边 11 名)参加比赛。此外,与每位球员相关联的是他们的比赛得分(例如,射门得分、进球得分、得分等)
创建这种关联的最佳实践是什么?任何提示将非常感谢。
对 Rails 非常陌生,管理过一些简单的项目,但现在正在涉足更复杂的表之间的关联,并希望得到一些帮助。
该场景最好与体育比赛相关。假设我们有
1) 一个团队(有_许多玩家)
2) 一个玩家(belongs_to team)
3) 一场比赛——现在变得棘手了。
一场比赛将有: 2 支球队和 22 名球员(每边 11 名)参加比赛。此外,与每位球员相关联的是他们的比赛得分(例如,射门得分、进球得分、得分等)
创建这种关联的最佳实践是什么?任何提示将非常感谢。
玩家拥有并属于多场比赛
该表应包含参加该比赛的球员的详细信息。例如他为哪支球队效力,从哪一分钟开始(因为球员可以改变)等。
应用程序/模型/team.rb
class Team < ActiveRecord::Base
has_many :players, inverse_of: :team
has_many :team_matches
has_many :matches, through: :team_matches
end
应用程序/模型/player.rb
class Player < ActiveRecord::Base
belongs_to :team, inverse_of: :player
has_many :player_matches
has_many :matches, through: :player_matches
end
应用程序/模型/match.rb
class Match < ActiveRecord::Base
has_many :players, through: :player_matches
has_many :teams, through: :team_matches
end
应用程序/模型/team_match.rb
class TeamMatch < ActiveRecord::Base
belongs_to :team
belongs_to :match
end
应用程序/模型/player_match.rb
class PlayerMatch < ActiveRecord::Base
belongs_to :player
belongs_to :match
end
db/migrate/create_matches.rb
class CreateMatches < ActiveRecord::Migration
def change
create_table :matches do |t|
t.datetime :happened_at
t.timestamps
end
end
end
db/migrate/create_players.rb
class CreatePlayers < ActiveRecord::Migration
def change
create_table :players do |t|
t.string :name
t.timestamps
end
end
end
db/migrate/create_teams.rb
class CreateTeams < ActiveRecord::Migration
def change
create_table :teams do |t|
t.string :name
t.timestamps
end
end
end
db/migrate/create_player_matches.rb
class CreatePlayerMatches < ActiveRecord::Migration
def change
create_table :player_matches do |t|
t.integer :match_id
t.integer :player_id
t.integer :player_shots_on_goal
t.integer :player_goals_scored
t.timestamps
end
end
end
db/migrate/create_team_matches.rb
class CreateTeamMatches < ActiveRecord::Migration
def change
create_table :team_matches do |t|
t.integer :match_id
t.integer :team_id
t.integer :team_points
t.timestamps
end
end
end
Edit1:@Mischa 应该在这里分享功劳!:)
Edit2:对不起,版本太多了,我完全低估了这个问题。