私はRuby/Railsにかなり慣れていないので、何が間違っているのか正確に理解できないという奇妙な問題を抱えています。
私の見解には次のコードがあります
<% gameNum = 0 %>
gameNum: <%= gameNum %>
homeTeamIndex: <%= @games[gameNum].homeTeamIndex %>
awayTeamIndex: <%= @games[gameNum].awayTeamIndex %><br />
<%= @NflTeams[@games[gameNum].homeTeamIndex].name %>
<%= @NflTeams[@games[gameNum].awayTeamIndex].name %><br />
<% gameNum = 1 %>
gameNum: <%= gameNum %>
homeTeamIndex: <%= @games[gameNum].homeTeamIndex %>
awayTeamIndex: <%= @games[gameNum].awayTeamIndex %><br />
<%= @NflTeams[@games[gameNum].homeTeamIndex].name %>
<%= @NflTeams[@games[gameNum].awayTeamIndex].name %><br />
<% (0..@games.count).each do |gameNum| %>
gameNum: <%= gameNum %>
homeTeamIndex: <%#= @games[gameNum].homeTeamIndex %>
awayTeamIndex: <%#= @games[gameNum].awayTeamIndex %> <br />
<%#= @NflTeams[@games[gameNum].homeTeamIndex].name %>
<%#= @NflTeams[@games[gameNum].awayTeamIndex].name %>
<% end %>
ビューを表示すると、次の結果が得られます。
gameNum: 0 homeTeamIndex: 10 awayTeamIndex: 3
Detroit Lions Buffalo Bills
gameNum: 1 homeTeamIndex: awayTeamIndex:
Cinncinatti Bengals Cleveland Browns
gameNum: 0 homeTeamIndex: awayTeamIndex:
homeTeamIndex: awayTeamIndex:
gameNum: 1 homeTeamIndex: awayTeamIndex:
homeTeamIndex: awayTeamIndex:
gameNum: 2 homeTeamIndex: awayTeamIndex:
homeTeamIndex: awayTeamIndex:
gameNum: 3 homeTeamIndex: awayTeamIndex:
homeTeamIndex: awayTeamIndex:
gameNum: 4 homeTeamIndex: awayTeamIndex:
ただし、いずれかの行のコメントを外すと、次のようになります。
homeTeamIndex: <%#= @games[gameNum].homeTeamIndex %>
awayTeamIndex: <%#= @games[gameNum].awayTeamIndex %> <br />
<%#= @NflTeams[@games[gameNum].homeTeamIndex].name %>
<%#= @NflTeams[@games[gameNum].awayTeamIndex].name %>
次のエラーが発生します(コメントを解除した行に基づいてメソッド名が変わります):
undefined method `homeTeamIndex' for nil:NilClass
インスタンス変数を使用不可にするループ内で何が起こっているのか、私は本当に理解していません。
これは確かにビューで行うのは簡単なことのように思え、私はそれを機能させることができないので、誰かが私が間違っていることを教えてくれることを願っています。
アップデート
ドミトリーのアドバイスに従って、私は次のように見解を変更しました。
<% gameNum = 0 %>
<% (@games).each do |game| %>
<strong>Game <%= gameNum+1 %> </strong> <br />
<%= image_tag(@NflTeams[game.homeTeamIndex].imagePath,
size: "40") %>
<%= @NflTeams[game.homeTeamIndex].name %>
VS
<%= image_tag(@NflTeams[game.awayTeamIndex].imagePath,
size: "40") %>
<%= @NflTeams[game.awayTeamIndex].name %> <br />
<% gameNum += 1 %>
<% end %>
モデルは次のとおりです。
Nflチーム
class CreateNflTeams < ActiveRecord::Migration
def change
create_table :nfl_teams do |t|
t.string :name
t.string :imagePath
t.timestamps
end
end
end
ゲーム
class CreateGames < ActiveRecord::Migration
def change
create_table :games do |t|
t.integer :homeTeamIndex
t.integer :awayTeamIndex
t.integer :spread
t.integer :week_id
t.timestamps
end
end
end
awayTeamIndex と homTeamIndex は NflTeams モデルへのインデックスであるため、Name と ImagePath を簡単に引き出すことができます。
私はまだ行に未定義のメソッドを取得しています:
<%= image_tag(@NflTeams[game.homeTeamIndex].imagePath,
size: "40") %>
他の提案はありますか?
更新 2
これら 2 つのモデルのモデルはあまりないため、移行のみを含めました。しかし、ここにあります。
class NflTeam < ActiveRecord::Base
end
class Game < ActiveRecord::Base
belongs_to :week
validates :homeTeamIndex, :inclusion => { :in => 0..100 }
validates :awayTeamIndex, :inclusion => { :in => 0..100 }
end
そして、ここにコントローラーコードがあります:
class WeeksController < ApplicationController
before_action :signed_in_user
before_action :confirmed_user
...
def show
@week = Week.find(params[:id])
@games = @week.games
@NflTeams = NflTeam.all
end
...
end