Как правильно реализовать ассоциацию двух моделей / объектов с помощью seed.rb в Rails?

Итак, вот сделка: у меня есть две модели, игрок и команда. У каждой команды есть много игроков, и каждый игрок принадлежит к команде. Код (исключая несколько ненужных атрибутов из модели проигрывателя):

class Team < ActiveRecord::Base
  attr_accessible :name, :points, :rank
  has_many :players

class Player < ActiveRecord::Base
  attr_accessible :name, :age, :pos, :team
  belongs_to :team

Я использую seed.rb для создания нескольких команд и группы игроков, а затем я пытаюсь распределить игроков по командам (то есть я пытаюсь реализовать ассоциации has_many и own_to). Код:

rndm = rand(1..10) #random number of teams

rndm.each do |i| #create rndm teams
  i = i.to_s
  Team.create(name: 'Team'+i, points: 0, ranking: 0)
end

for i in 1..rndm*22 do #create rndm*22 players (ideally 22 for each team)
  i = i.to_s
  Player.create(name: 'Player'+i, age: rand(15..35), 
                pos: 'Not specified', team: Team.find(rand(1..rndm)))
end

Теперь вышеприведенный код создает команды и игроков просто отлично. Тем не менее, это не связывает игроков с командами. Это не связывает их с командой вообще. То есть, когда я набираю "@player = Player.find(1)" и "@player.team" в консоли rails, все, что я получаю, это "=> nil". НО, когда я сам определяю команду (все еще в консоли), набирая "@player.team = Team.find(1)", связь достигается очень хорошо (в результате аргумент "player.team" возвращает подробности для команды с идентификатором команды: 1).

Я полагаю, мне нужно изменить контроллер проигрывателя или что-то в этом роде? Если так, что отличается, когда я связываю две модели с консоли, а не с seed.rb?

1 ответ

Решение

Чтобы ваша схема заполнения работала, вам нужно будет установить team_id: вместо:team при создании проигрывателя.

for i in 1..rndm*22 do #create rndm*22 players (ideally 22 for each team)
  i = i.to_s
  Player.create(name: 'Player'+i, age: rand(15..35), 
            pos: 'Not specified', team_id: Team.find(rand(1..rndm))).id
end
Другие вопросы по тегам