1

所以,这里是交易:我有两个模型,一个球员和一个团队。每个球队都有_许多球员,每个球员都属于一个球队。代码(从播放器模型中省略了一些不必要的属性):

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

现在,上面的代码可以很好地创建球队和球员。但是,它不会将球员与球队联系起来。它根本不将他们与团队联系起来。也就是说,当我在 rails 控制台中键入“@player = Player.find(1)”和“@player.team”时,我得到的只是“=> nil”。但是,当我通过键入“@player.team = Team.find(1)”自己指定团队(仍在控制台中)时,关联就可以很好地实现(导致“player.team”参数返回详细信息对于团队 ID 为:1) 的团队。

我假设我必须修改 Player 控制器或类似的东西?如果是这样,当我从控制台而不是从seeds.rb 关联这两个模型时,有什么不同?

4

1 回答 1

0

为了让播种方案正常工作,您必须在创建播放器时设置 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
于 2012-04-17T19:02:11.977 回答