0

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

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

游戏.rb

has_many :characters

字符.rb

belongs_to :game, :foreign_key => 'game_id'

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

<%= @character.game.name %>

但我得到这个错误:

字符中的 NoMethodError#show

显示 .../rpglegion/app/views/characters/show.html.erb 其中第 5 行提出:

nil:NilClass 的未定义方法“名称”

提取的源代码(第 5 行附近):

5: <%= @character.game.name %>

应用程序跟踪 | 框架跟踪 | 全跟踪

app/views/characters/show.html.erb:5:in >_app_views_characters_show_html_erb__872566584_80495980' app/controllers/characters_controller.rb:20:in `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

我无法弄清楚我到底做错了什么,协会不起作用。有人能帮帮我吗?

4

2 回答 2

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
于 2012-07-01T18:36:29.773 回答
0

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

于 2012-07-01T18:49:42.117 回答