2013-06-19 18 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是一个返回值,而不是崩溃。