未定义的方法`id&#39;对于#<activerecord :: relation [] =“”> </activerecord :: relation>

时间:2014-11-19 15:47:31

标签: ruby-on-rails

我无法从模型中获取id值。

我的代码:

session["game_space"]   = params[:game_space_id]

@player_space = PlayerSpace.where(game_space_id: session["game_space"], user_id: current_user.id)

session["player_space"] = @player_space.id #<<<<===== The error occurs here

redirect_to "show",:id => @player_space.id

错误讯息:

Error: undefined method `id' for #<ActiveRecord::Relation []>

你能帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:14)

问题:

  • Where子句返回活动记录关系对象,它是一种数组(集合)。所以你必须选择对象来调用id方法。

    @player_space = PlayerSpace.where(game_space_id:session [&#34; game_space&#34;],user_id:current_user.id).first

  • 您的查询结果/集合没有任何行/对象。所以调用#first将返回nil。因此,结果nil#id将再次导致错误。

希望你明白这一点!

答案 1 :(得分:2)

您正试图在ActiveRecord关系上获得id。试试这个:

@player_space = PlayerSpace.where(game_space_id: session["game_space"], user_id: current_user.id).first

然后获取@player_space

的ID

答案 2 :(得分:2)

您正在获得ActiveRecord::Relation课程,而不是模型对象。您可以从关系中的项目中获取ID。如果您确定自己准备回复一件商品,那么您可以这样做:

PlayerSpace.where(game_space_id: session["game_space"], user_id: current_user.id).first