has_many和belongs_to在视图中给出错误

时间:2012-07-01 18:21:55

标签: ruby-on-rails ruby-on-rails-3

我是ruby和rails的新手,几天来一直在努力解决这个问题。我知道我在我的应用程序的其他地方有另外一个这样的关联,但这个只是不起作用。

我的游戏模型和角色模型之间有一个has_many和belongs_to关系。

game.rb

has_many :characters

character.rb

belongs_to :game, :foreign_key => 'game_id'

我希望能够将game_id存储在角色中,然后在视图中显示游戏名称,如下所示:

<%= @character.game.name %>

但是我收到了这个错误:

  

字符#show中的NoMethodError

     

显示...... / rpglegion / app / views / characters / show.html.erb第5行:

     

nil的未定义方法`name':NilClass

     

提取的来源(第5行):

     

5:&lt;%= @ character.game.name%&gt;

     

应用程序跟踪|框架跟踪|完整跟踪

     

app / views / characters / show.html.erb:5:in&gt; _app_views_characters_show_html_erb ___ 872566584_80495980'   app / controllers / characters_controller.rb:20:在'show'

_characters_controller.rb _

def show
  @character = Character.find(params[:id])
  respond_to do |format| #line 20
    format.html # show.html.erb
    format.xml  { render :xml => @character }
  end
end

我无法弄清楚到底哪些关联不起作用我到底做错了什么。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

首先,belongs_to关联隐含“game_id”,因此您可以删除:foreign_key部分。

其次,@ character实际上是否将game_id设置为游戏?如果没有,打开一个控制台,找到你正在查看的角色,并将它的game_id设置为现有游戏。例如:

character = Character.find_by_id(some_character_id)
character.game = Game.find_by_id(some_game_id)
character.save

答案 1 :(得分:0)

通过rails控制台验证您正在做的是对还是错的最佳方法。所以在命令行输入rails c。 type Character.all或Character.find(character_id) 看看你的game_id是否有价值。如果不是你有问题......