nil的未定义方法`each':使用for循环时Rails中的NilClass

时间:2013-10-23 23:08:05

标签: ruby-on-rails-3 rotten-tomatoes

获取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定义并适用于所有其他区域。

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

我已根据腐烂的西红柿检查确保所有田地都是正确的。我不知道接下来要做什么,因为我已经完成了之前使用的所有问题和修复。我真的很感谢你的时间,如果有更多的数据需要我知道,我会非常乐意提供它。谢谢!

2 个答案:

答案 0 :(得分: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? %>

答案 1 :(得分:0)

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

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

然后,在您的视图中,使用each方法而不是for循环:

<% @movies.each do |movie| %>
  ...
<% end %>