ruby-on-rails - 未定义方法 `each' 为 nil :NilClass - Rails

标签 ruby-on-rails ruby

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

Controller 方法:

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

绑定(bind)信息方法:

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

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

最佳答案

这里有两个问题:

首先:@subscriber.each 失败,undefined method 'each' for nil:NilClass。这基本上告诉您您尝试在 nil 中调用 each,因此 @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 %>

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

关于ruby-on-rails - 未定义方法 `each' 为 nil :NilClass - Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952980/

相关文章:

ruby - 准备好的语句已经存在

ruby-on-rails - Ruby 代码在路由工作时没有得到解释

ruby-on-rails - Rails 和主键/唯一性。如何使用多列作为主键?

ruby-on-rails - 如何获取 Rails 模板以在迁移列上添加其他属性?

ruby-on-rails - 在 Heroku 日志中找不到错误

ruby-on-rails - 将 Rails 应用程序连接到 Amazon RDS 服务器。在控制台中工作,但现在页面不会加载

ruby-on-rails - Heroku 上的 H12 超时错误

ruby-on-rails - 禁用主动疯狂发货

ruby-on-rails - 从实例方法中访问 ActiveSupport::Concern 类方法

ruby - 为什么要返回一个枚举器?