2017-03-02 69 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)' - 这将是那些拥有'参赛者'的人的名单。 –

相关问题