2012-04-17 4 views
1

Итак, вот сделка: у меня две модели, игрок и команда. Каждая команда имеет несколько игроков, и каждый игрок принадлежит команде. Код (опуская несколько ненужных atributes от модели плеера):Как правильно реализовать объединение двух моделей/объектов через seeds.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 

Я использую seeds.rb создать несколько команд и кучу игроков, а затем я пытаюсь поставить игроков в команды (то есть, Я пытаюсь на самом деле реализовать ассоциации «has_many» и «belongs_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» возвращает данные для команды с id команды: 1).

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

ответ

0

Для того, чтобы вы использовали схему посева, вам нужно будет установить team_id: вместо: команда, когда вы создаете Player.

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 
+0

или team_id: рандов (1..rndm) – RadBrad

+0

Там нет «team_id» атрибут, хотя, ни в модели команды, ни в проигрывателе один. Должен ли я добавить его к тому и другому? (Я получаю «неизвестный атрибут: team_id», когда я запускаю rake db: seed сейчас) – sebkkom

+0

Если игроку принадлежит команда, игрокам будет нужен атрибут team_id. – RadBrad

 Смежные вопросы

  • Нет связанных вопросов^_^