0

私はルビーとレールを初めて使用し、この問題に数日間苦労しています。アプリの他の場所にこのような別の関連付けがあったことは知っていますが、これは機能していません。

Game モデルと Character モデルの間に has_many と belongs_to の関係があります。

game.rb

has_many :characters

キャラクター.rb

belongs_to :game, :foreign_key => 'game_id'

game_id をキャラクターに保存し、次のようにゲームの名前をビューに表示できるようにしたい:

<%= @character.game.name %>

しかし、私はこのエラーが発生します:

NoMethodError in Characters#show

.../rpglegion/app/views/characters/show.html.erb を表示していて、5 行目が発生しています:

nil:NilClass の未定義のメソッド `name'

抽出されたソース (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

まず、「game_id」は belongs_to 関連付けによって暗示されるため、: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 に答える