0

以下の nil:NilClassエラーに対して未定義のメソッド `site_name' を受け取りました。助けていただければ幸いです。Site テーブルに site_name をリストしようとしていますが、問題を解決する最善の方法がわかりません。

class Site < ActiveRecord::Base
      attr_accessible :site_id, :site_name, :region

      has_many :trials, :foreign_key => "site_id"

    end

    class Trial < ActiveRecord::Base
      attr_accessible :trial_id, :site_id, :year, :trial_type

      scope :year, ->(year) { where(year: year) }
      scope :trial_id, ->(trial_id) { where(trial_id: trial_id) }

      belongs_to :site

    end

私のコントローラー:

class TrialsController < ApplicationController

  def index
    @years = Trial.group('year').order('year DESC')
    end

  def trial
    @trial = Trial.trial_id(params[:trial_id])
  end

**def list
@list = Trial.year(params[:year]).order(:region_id).joins(:sites).where('sites.site_id' => :site_id)

終わり**

end

私の見解:

    <% @list.each do |list| %>
        <tr>
        <td>
      <%= link_to list.site.site_name, trial_trials_path(trial_id: list.trial_id) %>
        </td>
        <td>    
        <%= link_to list.trial_type, trial_trials_path(trial_id: list.trial_id) unless list.trial_type.blank? %>
        </td>
        <td>    
        <%= link_to list.trial_type, trial_trials_path(trial_id: list.trial_id) %>
        </td>
        <td>    
        <%= link_to list.planted_at, trial_trials_path(trial_id: list.trial_id) unless list.planted_at.blank? %>
        </td>
        <td>    
        <%= link_to list.picked_at, trial_trials_path(trial_id: list.trial_id) unless list.picked_at.blank? %>
        </td>
        </tr>
        <% end %>
4

3 に答える 3

1

この行を次のように変更するとどうなりますか。

<%= link_to list.site.site_name, trial_trials_path(trial_id: list.trial_id) if list.site.try(:site_name) %>

また、Site.where(site_name: nil)Rails コンソールで a を実行して、名前のないサイトを確認することもできます。

于 2013-10-21T08:31:52.787 に答える
0

リストのサイトがなくてもページがクラッシュしたくない場合は、これを使用してみてください

list.site.try(:site_name)

しかし、次のような別のフローを使用する必要があると思います

  1. サイトなしでリストを作成させないでください。
  2. サイトのないリストをリストしないでください。
于 2013-10-21T10:02:09.163 に答える
0

たとえば、デフォルトのサイト名を決定する必要があります。"Example.com". そして、単に nil で定義します:

def nil.site_name
  "Example.com"
end

そして、エラーはなくなります。

于 2013-10-21T23:40:21.240 に答える