使用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()
如果我把球员加入球队,新的球员团队示例会被启动吗?如果没有新的球员团队示例,如何把球员加入球队?
更新2
看起来如果我想把球员加到队伍里
team.players << player
比我需要设置可选:true或单独的Role连接表将PlayerTeam的belongs_to:角色移动到单独的模型。
1条答案
按热度按时间4nkexdtk1#
使用这段代码,您不会在所有这些模型之间创建关系。
这样做的好方法应该是:
此外,如果您希望将这些示例存储到DB中,请将所有
.new
替换为.create
。如果您执行PlayerTeam.create
,则需要首先对所有其他示例执行.create
,因为PlayerTeam将要求保存role
、team
和player
ID。