繁体   English   中英

Rails 4 has_many:通过NoMethodError

[英]Rails 4 has_many :through NoMethodError

这可能是一个简单的解决方案,但我很沮丧。

我想显示一个表,其中包含:事件名称| EventAthlete结果| 赛事运动员成绩

如果我在撬控制台中检查数据,则所有链接均正确连接。 例如。 @athlete.event_athletes.first.event.name这将返回事件的正确名称。

但是,当我尝试在浏览器中显示数据(即ea.event.name )时,收到错误消息:

“ / athletes / 1的未定义方法“名称”为nil:NilClass的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

您在这里@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM