未定义的方法`每个'为零:NilClass - Rails

时间:2016-06-21 19:25:54

标签: ruby-on-rails ruby

我得到一个nil类错误。我完全理解这个错误告诉我的是什么,但我不知道为什么它没有。在我看来应该有一个对象传递到我的表。这应该很容易调试。为清晰起见,这是我的代码。

控制器方法:

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

信息方法绑定:

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

如果您需要更多信息,请告诉我?

1 个答案:

答案 0 :(得分:6)

这里有两个问题:

首先:@subscriber.eachundefined 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 %>

并使用数据库中的电话号码。