2

为 nil 获取未定义的方法“each”:NilClass 错误

<% for movie in trailers %>
    <li>
      <article>
        <div class="photo">
          <a href="<%= movie['links'] %>"><img src="<%= movie['thumbnail'] %>" alt="Photo" class="wrap_me_white"/></a>
        </div>
        <div class="details">
          <h4 class="title"><a href="<%= movie['title'] %>"></a></h4>
        </div>
      </article>
    </li>
  <% end %>

这是使用来自烂番茄的 API,该 API 已定义并适用于使用不同 API 的所有其他领域。

def trailers
    config = Rails.application.config
    resp = HTTParty.get("#{config.rotten_tomatoes_api_url}movies/770672122/clips.json?apikey=#{config.rotten_tomatoes_api_key}")
    movies = JSON.parse(resp.body)['movies']
end

根据烂番茄,我已经检查以确保所有字段都是正确的。我不确定下一步该做什么,因为我已经解决了我之前使用过的所有问题和修复。非常感谢您的宝贵时间,如果需要更多数据,请告诉我,我非常乐意提供。谢谢!

4

2 回答 2

1

对于trailers您发送响应的方法,JSON.parse(resp.body)['movies'] 如果它返回一个数组,那么循环将正常工作。如果它返回nil,那么您将收到错误
undefined method 'each' for nil:NilClass ,因为您正在尝试迭代一个nil对象。

最好像这样修改循环,

<% @trailers = trailers %>  
<% for movie in @trailers %>  
  <li> ... </li>  
<% end if @trailers.present? %>
于 2013-10-24T04:43:36.967 回答
0

尝试在控制器操作中使用实例变量,以便视图可以显示每个电影:

@movies = JSON.parse(resp.body)['movies']

然后,在您看来,使用该each方法而不是 for 循环:

<% @movies.each do |movie| %>
  ...
<% end %>
于 2013-10-24T04:15:22.600 回答