我是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
我无法弄清楚到底哪些关联不起作用我到底做错了什么。有人可以帮帮我吗?
答案 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是否有价值。如果不是你有问题......