2016-06-21 4 views
1

Я получаю ошибку класса nil. Я точно понимаю, что эта ошибка говорит мне, но я не знаю, почему это ноль. Мне кажется, что должен быть перенесен объект на мой стол. Это должно быть легко отлаживать. Вот мой код для ясности.undefined метод `each 'for nil: NilClass - Rails

CONTROLLER МЕТОД:

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

ВИД:

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

Binding по информации метода:

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

Дайте мне знать, если вам нужна дополнительная информация?

+0

Вы запустили 'info' перед кодом здесь? В противном случае '@ абонент' не будет инициализирован. –

+0

Извините, что вы подразумеваете под "run' info' "? Я немного новичок во всем этом, поэтому я скучаю по глупым вещам – Bitwise

+0

Можете ли вы добавить два отладки в свой информационный метод? ниже существующей строки, параметры logger.debug @subscriber и logger.debug. Редактировать с выходом –

ответ

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

Отрегулируйте 'if' с помощью <% else %>. –

+0

Еще раз спасибо @spickermannn – Bitwise

+0

@gen: Спасибо, сделано. – spickermann