2012-04-17 16 views
1

だから、ここでは取引です:私は2つのモデル、プレーヤーとチームを持っています。すべてのチームにはたくさんの選手がいて、すべての選手はチームに所属しています。 (プレーヤモデルからいくつかの不要なatributesを省略)コード:Railsでseeds.rb経由で2つのモデル/オブジェクトの関連付けを正しく実装する方法は?

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」と入力すると、「=> nil」と表示されます。しかし、私は自分自身を(まだコンソール上に)「@ player.team = Team.find(1)」とタイプして指定すると、関連付けはうまくいきます(結果として「player.team」という引数が返されます)チームid:1のチームの場合)。

Playerコントローラーなどを変更する必要があると思いますか?もしそうなら、私はseeds.rbからではなくコンソールから2つのモデルを関連付けるときに何が違うのですか?

答えて

0

シードスキームを動作させるには、プレーヤを作成するときにチームの代わりにteam_id:を設定する必要があります。

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」属性はいえ、どちらのチームモデルでもプレイヤー1ではありません。私はそれを両方に加える必要がありますか? (私はrake db:seedを実行すると "unknown attribute:team_id"を得ています) – sebkkom

+0

PlayerがTeamに属している場合、playersテーブルにはteam_id属性が必要です。 – RadBrad

関連する問題