0

次のエラーが表示されます。

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 が事前に入力されています。

4

1 に答える 1