![](/img/trans.png)
[英]Ruby on Rails associations for has_many, through, source returns 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.