Задача 1: Вы можете превысить максимальное количество игроков на команду и на позицию
Эти строки
if (count < 3 && club.players.length < 23)
club.players << p
p.club = club
end
можно обобщить как «Вы можете добавить игрокав клуб, если в клубе менее 23 игроков и на этой позиции уже менее 3 игроков. "
Это означает, что вы можете добавить еще одного ... давая 3 за позициюи 23 для команды.Так что эта часть логики неверна.Вместо этого вы хотите
if (count < 2 && club.players.length < 22)
Проблема 2: Случайное число может не гарантировать, что у вас есть подходящие типы игроков
Если позиция генерируется случайным образом, вы не можетебудьте уверены, что у вас будет достаточно игроков правильных типов.Что, если, например, случайное число совпадало всегда 2?У вас никогда не будет полноценной команды.
Проблема 3: Как только игрок назначен, вы продолжаете пробовать другие клубы
Как только вы назначаете игрока, выне следует смотреть больше на клубы.Чтобы сделать это, вам нужно вырваться из блока each
.
if (count < 3 && club.players.length < 23)
club.players << p
p.club = club
break
end
Даже если вы звоните club.players << p
несколько раз для одного и того же игрока, DataMapper знает о вашей индивидуальной игре.одна ассоциация и последнее назначение «выигрывает».