使用Rails 5.2.4.2,我有以下模型:
Team
has_many :player_teams
has_many :players, through: :player_teams
Role
has_many :player_teams
has_many :players, through: :player_teams
Player
has_many :player_teams
has_many :teams, through: :player_teams
has_many :roles, through: :player_teams
PlayerTeam
belongs_to :team
belongs_to :player
belongs_to :role
不知道如何将玩家添加到团队中。是像我下面那样添加它的正确方法,还是需要首先使用角色和团队创建PlayerTeam实例?
role = Role.create(...)
team = Team.create(...)
player = Player.create(...)
player.roles << role => Ok
team.players << player => ActiveRecord::RecordInvalid Exception: Validation failed: Player teams team must exist
更新1
我知道下面的代码和Pierre Avinain的代码是正确的,但是还有另一种方法可以将队员添加到团队中吗?
player_teams = PlayerTeam.create(team: evaluator.team, role: evaluator.player_role)
player.player_teams << player_teams => Ok
说我为玩家添加了角色
player.roles << Role.create()
如果我将玩家添加到团队中,是否会启动新的PlayerTeam实例?如何在没有新的PlayerTeam实例的情况下将玩家添加到团队?
更新2
似乎我想按自己的意愿将球员添加到球队
team.players << player
我需要设置可选参数:true或单独的角色联接表,以将PlayerTeam的belongs_to:role移至单独的模型。
答案 0 :(得分:0)
使用此代码,您无需在所有这些模型之间创建关系。
一个好的方法应该是:
role = Role.new(...)
team = Team.new(...)
player = Player.new(...)
playerTeam = PlayerTeam.new(role: role,
team: team,
player: player)
此外,如果要将这些实例存储到数据库中,请用.new
替换所有.create
。如果执行PlayerTeam.create
,则首先需要在所有其他实例上执行.create
,因为PlayerTeam将需要保存role
,team
和player
ID。