0

これはおそらく簡単な解決策ですが、私は困惑しています。

次のテーブルを表示したい: イベント名 | イベントアスリート結果 | イベントアスリートスコア

pry コンソールでデータを確認すると、すべてが正しくリンクされています。例えば。@athlete.event_athletes.first.event.name これにより、イベントの正しい名前が返されます。

ただし、ブラウザー (つまりea.event.name) でデータを表示しようとすると、次のエラーが表示されます。

「nil:NilClass の /athletes/1 未定義メソッド `name' で NoMethodError」

これは、強力なパラメーターの問題であると思われます。

https://github.com/thaczuk/scoring/tree/eventScoring アドバイスをお願いします。

モデル

class Athlete < ActiveRecord::Base
  belongs_to  :competition
  belongs_to  :competition_category
  has_many    :event_athletes
  has_many    :events, through: :event_athletes
end

class Event < ActiveRecord::Base
  belongs_to  :competition
  has_many    :event_athletes
  has_many    :athletes, through: :event_athletes
end

class EventAthlete < ActiveRecord::Base
  belongs_to  :athlete
  belongs_to  :event
end

コントローラ

class AthletesController < ApplicationController

  ...

  def show
    @athlete = Athlete.find(params[:id])
    binding.pry
  end

  ...

private
    def athlete_params
      params.require(:athlete).permit(:firstname, :lastname, :gender, :competition_id, :competition_category_id)
    end
end

意見

%div
  %table.table
    %thead
      %tr
        %th(width="30%") Event
        %th Result
        %th Score

    %tbody
      -@athlete.event_athletes.each do |ea|
        %tr
          %td= ea.event.name
          %td= ea.result
          %td= ea.score
4

1 に答える 1

0

ここの記録ごとに 1 人のアスリートと 1 つのイベントがあります。@athlete.event_athletes.each

すべてのイベントアスリートをループするのではなく、althete のすべてのイベントをループしたいだけです。

あなたがしたいことは次のとおりです。

@athelete.events.each do |event|
     %td= event.name
     % ea = EventAthlete.where(athlete_id: @athelte.id, event_id: event.id)
     %td= ea.score
     %td= ea.result
于 2013-11-10T13:18:43.910 に答える