2016-06-21 247 views
1

我得到一個無類錯誤。我完全理解這個錯誤告訴我什麼,但我不知道爲什麼它是零。在我看來,應該有一個對象傳遞到我的表。這應該很容易調試。這是我的代碼清晰。未定義的方法`each'for nil:NilClass - Rails

控制器的方法:

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 %> 

錯誤:

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

對不起,「run'info'」是什麼意思?我對這一切都有點新東西,所以我錯過了愚蠢的事情仍然 – Bitwise

+0

你可以添加兩個調試你的信息方法?在存在的行下面,logger.debug @subscriber和logger.debug params。編輯輸出 –

回答

6

您這裏有兩個問題:

第一:@subscriber.each失敗undefined method 'each' for nil:NilClass。這基本上告訴你,你試圖撥打each的東西是nil,因此@subscriber必須是nil。這意味着Subscriber.find_by_phone_number(params[:phone_number])沒有返回訂戶。發送到服務器的電話號碼在數據庫中沒有匹配的條目。

第二:即使在數據庫中有匹配的條目,您的代碼也會失敗。因爲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'。 – 2016-06-21 19:41:57

+0

再次感謝@spickermannn – Bitwise

+0

@gen:謝謝,完成。 – spickermann

相關問題