2013-10-21 17 views
0

我收到一個未定義的方法`site_name'爲零:NilClass error for following。將不勝感激任何幫助。我試圖在Site表中列出site_name,我不知道如何最好地解決問題。對於零的未定義方法:NilClass錯誤

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 %> 
+2

也許只是您的列表條目之一沒有網站? – Pavel

+0

我正在嘗試從站點數據庫訪問site_name。 – Grinskull

回答

1

,如果你只需要改變什麼行這樣:

<%= 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)以查看哪個站點沒有名稱。

+0

與上述沒有運氣。謝謝你回答本傑明。 – Grinskull

+0

有條件地犯了一個小錯誤。請再試一次。 –

+0

不要再發生錯誤,但它也不會列出任何東西,空白。我需要在控制器中與「@list = Trial.year(params [:year]).order(:region_id)」變量一起調用Site嗎? – Grinskull

0

,如果你不想讓頁面美眉即使沒有網站列表中,你可以嘗試使用此

list.site.try(:site_name) 

,但我認爲你應該使用其他流一樣

  1. 不要讓沒有網站的列表創建。
  2. 不要列出沒有網站的列表。
+0

這種方法仍然沒有運氣。 – Grinskull

0

您必須決定您的默認網站名稱,例如。 "Example.com"。然後你只需在零上定義它:

def nil.site_name 
    "Example.com" 
end 

並且錯誤將消失。

+0

此方法可行,但是,如何才能最好地選擇相應的site_name其中sites.site_name = trials_site_id?我似乎有麻煩加入兩張桌子在一起。 – Grinskull

+0

我不是一個Rails專家,我提供的解決方案僅僅是一個破解,一個快速kluge。尋找真正的問題解決方案超出了我的能力範圍。 –

+0

沒有戲劇,感謝您的幫助。 – Grinskull

相關問題