2017-03-02 8 views
0

私は登録と競技者モデルとの間にかなり単純な関連性があります。ActionView :: Template :: Error(Nil:NilClassのための未定義メソッド `FirstName '):

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)とルビー-2.3.3-P222を実行していますよ。私もruby-2.2.4-p230を試してみて、同じ結果を出します。私のユーザと役割は同じように関連しています。電話番号<%= user.role.name %>は問題なく使用できます。私は2人の間で私の論理を鏡映していますし、なぜか喪失しています。その洞察力に感謝します。

答えて

2

ここで問題となるのは、@registrationsの(99%)すべてが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(:contestant).pluck( 'registrations.id')' 'Registration.where(id:ids)' - これは 'contestant'を持つ人のリストになります。 –

関連する問題