2017-03-02 67 views
0

我的註冊和參賽者模型之間有一個相當簡單的關聯。ActionView :: Template :: Error(nil:NilClass的undefined方法`名字'):

class Contestant < ActiveRecord::Base 
    has_many :registrations 
end 

class Registration < ActiveRecord::Base 
    belongs_to :contestant 
end 

我試圖從我的註冊索引頁面引用參賽者的姓名。

<tbody> 
    <% @registrations.each do |registration| %> 
     <tr> 
     <td><%= registration.contestant.FirstName%></td> 
     </tr> 
    <% end %> 
    </tbody> 

訪問頁面產

ActionView::Template::Error (undefined method `FirstName' for nil:NilClass): 

我運行的Ruby-2.3.3-P222用ActiveRecord 4.2.6(Rails的4.2.6)。我也試過ruby-2.2.4-p230並得到相同的結果。扭曲是我有我的用戶和角色之間的類似關聯。我可以打電話<%= user.role.name %>沒有問題。我已經在兩者之間反映了我的邏輯,並且對於原因感到不知所措。謝謝大家的洞察力。

回答

2

這裏的問題是,(99%)並非所有的@registrations都有關聯contestant,因此你得到一個錯誤。

兩個選項:

1)只有具有相關contestants顯示@registrations

@registrations.joins(:contestant).each... 

2)使用try,以避免錯誤:

registration.contestant.try(:FirstName) 
+0

啊,你說得對! 「registration.contestant.try(:FirstName)」顯示空白值。由於我引用了正確的參賽者ID,這是令人困惑的。另一個解決的謎團,但這使我朝着正確的方向發展。謝謝! – EDPittore

+0

@EDPittore沒有probs。只要檢查'ids = @ registrations.joins(:參賽者).pluck('registrations.id')''Registration.where(id:ids)' - 這將是那些擁有'參賽者'的人的名單。 –

相關問題