ActionView :: Template :: Error(未定义的方法`FirstName'为nil:NilClass):

时间:2017-03-02 14:56:03

标签: ruby ruby-on-rails-4 activerecord

我的注册和参赛者模型之间有一个相当简单的关联。

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):

我正在使用activerecord 4.2.6(Rails 4.2.6)运行Ruby-2.3.3-p222。我也尝试过ruby-2.2.4-p230并得到相同的结果。扭曲是我的用户和角色之间有类似的关联。我可以毫无问题地拨打电话<%= user.role.name %>。我已经在两者之间反映了我的逻辑,并且不知道为什么。谢谢大家的见解。

1 个答案:

答案 0 :(得分:3)

此处的问题是(99%)并非所有@registrations都关联contestant,因此您收到了错误。

两个选项:

1)仅显示@registrations与关联的contestants

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

2)使用try来避免错误:

registration.contestant.try(:FirstName)