2013-06-19 10 views
0

我想創建一個新玩家,並且match_id被一個類方法的調用填充: 當我運行這個代碼時,match_id得到一個沒有賦值的值,而遊戲是在那裏,它會返回一個適當的Game對象。我在這裏做錯了什麼?使用create時外鍵沒有任何值

Player.create(game_id: Game.default_game) 

的 「default_game」 類方法是這樣的:

def self.default_game 
    Game.where(name: "Poker").first 
    end 
+0

當你說'在第一個句子match_id' ,你的意思是'game_id'嗎? –

+0

你說遊戲是適當的對象,但是Game.default_game呢? –

+0

對不起,是的,我的意思是match_id – John

回答

1

如果你的ActiveRecord的模型協會是正確設置,你可以這樣做:

Player.create(game: Game.default_game) 

或者,你可以更直接設置ID:

Player.create(game_id: Game.default_game.id) 
+0

當我使用第一個選項時,它返回「Can not mass-assign protected attributes:game」。如果第二個選項返回「被調用的id爲零,如果你真的想要nil的id,則使用object_id」,否則將被誤認爲是4。 – John

+0

然後你的玩家模型需要:'attr_accessible:game'對於第二部分,表明存在另一個問題,並且default_game沒有返回一個遊戲,或者至少有一個沒有id(可能沒有持久化到數據庫)。 – tilthouse

+0

你的解決方案是對的,我有一些混合在數據庫中的數據 – John

0

是game_id的數據類型有default_game的相同的數據類型?在一些語言中,NIL是一個返回值,而不是崩潰。