2012-07-01 26 views
0

我是新的紅寶石和鐵軌,並一直在努力解決這個問題幾天。我知道我在我的應用程序的其他地方有另一個關聯,但這只是不起作用。has_many和belongs_to在視圖中給出錯誤

我有一個has_many和belongs_to我的遊戲模型和角色模型之間的關係。

game.rb

has_many :characters 

character.rb

belongs_to :game, :foreign_key => 'game_id' 

我希望能夠到game_id存儲在字符,然後在的觀點一樣,展示遊戲的名字這個:

<%= @character.game.name %> 

但是我得到這個錯誤:

NoMethodError in Characters#show

Showing .../rpglegion/app/views/characters/show.html.erb where line #5 raised:

undefined method `name' for nil:NilClass

Extracted source (around line #5):

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

Application Trace | Framework Trace | Full Trace

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 

我無法弄清楚究竟我做錯了,該協會不工作。有人能幫幫我嗎?

回答

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 
0

最好的方式來驗證你在做什麼是對還是錯是通過rails控制檯。所以在命令行輸入rails c。輸入Character.all或Character.find(character_id) 查看你的game_id是否有價值。如果不是你有問題....

+0

謝謝你們倆。我現在覺得很愚蠢,以至於我知道問題是什麼。一旦我進入rails控制檯,我發現分配給該角色的game_id已經老了,並且不再存在於表中。下一次,我會先去控制檯! –