Используя 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
Я знаю, что приведенный ниже код и Пьер Авинаин верен, но есть ли другой способ добавить игрока в команду?
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's положение_to: роль в отдельную модель.