如何通过Rails中的seeds.rb正确实现两个模型/对象的关联?

时间:2012-04-17 18:57:36

标签: associations has-many belongs-to seed model-associations

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

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”时,我得到的是“=&gt; nil”。但是,当我通过键入“@ player.team = Team.find(1)”自己指定团队(仍然在控制台中)时,关联实现得很好(导致“player.team”参数返回详细信息对于团队ID为1的团队。

我假设我必须修改播放器控制器或类似的东西?如果是这样,当我从控制台而不是来自seeds.rb?

关联这两个模型时会有什么不同

1 个答案:

答案 0 :(得分: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