簡體   English   中英

未定義的方法,用於nil:NilClass錯誤

[英]undefined method for nil:NilClass error

我收到以下內容的nil:NilClass錯誤的未定義方法`site_name' 將不勝感激。 我正在嘗試在“站點”表中列出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 %>

如果僅將行更改為此:

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

另外,您可以在Rails控制台中執行Site.where(site_name: nil) ,以查看哪個站點沒有名稱。

如果即使沒有列表站點也不想頁面粉碎,則可以嘗試使用此方法

list.site.try(:site_name)

但我認為您應該使用另一種流程,例如

  1. 不要在沒有網站的情況下創建列表。
  2. 不要列出沒有網站的列表。

您必須確定默認站點名稱,例如。 "Example.com" 然后只需在nil上定義它:

def nil.site_name
  "Example.com"
end

錯誤將消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM