2016-06-21 12 views
1

私はnilクラスエラーを受け取りました。私はこのエラーが何を伝えているのか正確に理解していますが、なぜそれがゼロであるのか分かりません。私のテーブルにオブジェクトが渡されるはずです。これは簡単にデバッグできます。明快にするために私のコードはここにあります。未定義メソッド `each 'for nil:NilClass - Rails

CONTROLLER METHOD:

def info 
    @subscriber = Subscriber.find_by_phone_number(params[:phone_number]) 
end 

VIEW:

<% @subscriber.each do |subscriber| %> 
    <tr> 
    <td><%= image_tag avatar_url(subscriber) %></td> 
    </tr> 
<% end %> 

がERROR:INFOメソッドにバインド

Showing /Users/intern/Desktop/Rails/rowster/app/views/subscribers/info.html.erb where line #3 raised: 
undefined method `each' for nil:NilClass 

[1] pry(#<SubscribersController>)> @subscriber 
=> nil 

情報が必要な場合はお知らせください。

まず:

+0

コードの前に 'info'を実行しましたか?さもなければ '@ subscriber'は初期化されません。 –

+0

申し訳ありませんが、「info info」を実行するとどういう意味ですか?私は少しこれの新しいので、私は愚かなことをまだ逃す – Bitwise

+0

あなたの情報メソッドに2つのデバッグを追加することはできますか?既存の行の下に、logger.debug @subscriberとlogger.debugのパラメータがあります。出力で編集する –

答えて

6

あなたはここに二つの問題を持っている@subscriber.eachundefined method 'each' for nil:NilClassで失敗します。これは、基本的にeachnilと呼ぶことを試みることを意味するので、@subscribernilでなければなりません。つまり、Subscriber.find_by_phone_number(params[:phone_number])はサブスクライバを返さなかったことを意味します。サーバーに送信された電話番号に、データベースに一致するエントリがありません。

第2:データベースに一致するエントリがあっても、コードは失敗します。 find_by_phone_numberサブスクライバを返し、配列ではないためです。そのため、eachを呼び出すと再び失敗します。

<% if @subscriber %> 
    <tr> 
    <td><%= image_tag avatar_url(@subscriber) %></td> 
    </tr> 
<% else %> 
    <tr><td>No subscriber found!</td></tr> 
<% end %> 

、データベースにある電話番号を使用:するようにコードを変更する両方の問題を解決する

+0

<% else %>で 'if'を調整します。 –

+0

もう一度@spickermannn – Bitwise

+0

@gen:ありがとう、終わった。 – spickermann

関連する問題