次のエラーが表示されます。
undefined method `variety_id' for []:ActiveRecord::Relation
<%= r.results.variety_id %> コードをトライアル ビューに追加するとき。<%= r.site.site_name %> は正常に機能しますが、<%= r.results.variety_id %> が機能しない理由がわかりません。結果データベースには多くの trial_id (3-6) があり、それらを Trials データベースと照合して、それらをトライアル ビューにリストします。
トライアルビュー
<% @results.each do |y| %>
<h1><%= y.year %> Trials</h1>
<% end %>
<hr>
<% @results.each do |s| %>
<h3><%= s.site.site_name %></h3>
<% end %>
<hr>
<% @results.each do |r| %>
<%= r.results.variety_id %>
<% end %>
コントローラ
def trial
@results = Trial.where(params[:trial_id])
end
モデル
class Trial < ActiveRecord::Base
attr_accessible :trial_id, :site_id, :year
scope :year, ->(year) { where(year: year) }
scope :trial_id, ->(trial_id) { where(trial_id: trial_id) }
belongs_to :site, :primary_key => 'site_id'
has_many :results
end
class Result < ActiveRecord::Base
attr_accessible :trial_id, :variety_id, :year
belongs_to :trial
end
lass Site < ActiveRecord::Base
attr_accessible :site_id, :site_name, :region
has_many :trials
end
スキーマ
create_table "results", :force => true do |t|
t.integer "trial_id"
t.integer "variety_id"
t.string "year"
end
create_table "sites", :force => true do |t|
t.integer "site_id"
t.string "site_name"
t.integer "region"
end
create_table "trials", :force => true do |t|
t.integer "trial_id"
t.integer "site_id"
t.string "year"
end
結果とトライアルの Trial_id 列には、対応する ID が事前に入力されています。