2017-09-04 146 views
-1

我试图在终端中运行rails db:seed时出现问题。 它给我下面的错误:NoMethodError:未定义方法`[]'为零:NilClass

NoMethodError : undefined method `[]' for nil:NilClass

你能帮帮我吗?到目前为止,我尝试了几件事情,但没有成功。

(1..50).each do |movie| 
    response = HTTParty.get("https://api.themoviedb.org/3/movie/popular?api_key=8d027704c57524153a0af2b38415ac45&language=en-US&page=1") 
    results = JSON.parse(response.body) 

    movie = Movie.new({ 
    title: results["title"], 
    popularity: results[0]["popularity"], 
    image: results["poster_path"], 
    year: results[0]["release_date"], 
    genre: results[0]["genre_ids"] 
    }) 

    movie.save 
    puts "#{movie['title']} was saved." 
    end 

我的模式是这样的:

create_table "movies", force: :cascade do |t| 
    t.string "title" 
    t.string "image" 
    t.string "year" 
    t.string "genre" 
    t.string "rating" 
    t.string "popularity" 
    t.string "video" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

谢谢您的帮助。

+1

_“我已经试过几件事情” _ - 我会做的第一件事是推出'irb'(或'轨console'),并通过线(或表达执行的代码行表达)。它会显示'results [“title”]'和'results [0]'返回'nil'。 – Stefan

回答

1

的JSON具有结构:

{ 
    "page": 1, 
    "total_pages": 978, 
    "total_results": 19552, 
    "results": [..] 
} 

变化

results = JSON.parse(response.body) 

results = JSON.parse(response.body)['results'] 

您的代码在其他地方太破。这里是我的建议:

res = HTTParty.get('https://api.themoviedb.org/3/movie/popular?api_key=8d027704c57524153a0af2b38415ac45&language=en-US&page=1') 
results = JSON.parse(res.body)['results'] 

results.each do |result| 
    movie = Movie.create({ 
    title: result['title'], 
    popularity: result['popularity'], 
    image: result['poster_path'], 
    year: result['release_date'], 
    genre: result['genre_ids'] 
    }) 

    puts "#{movie.title} was saved." 
end 
+0

谢谢你的回答,所以当我改变它时,它现在给我出现以下错误:TypeError:没有将字符串隐式转换为Integer – Em774

+0

ok,添加[0]工作,谢谢。所以它播放了我最喜欢的50部电影的名单,但我不确定它为什么要打印50次相同的电影。这条线是否有什么值得注意的地方:把“#{movie ['title']}保存起来。” ? – Em774

+0

好吧,如果我删除它们,那么我得到一个错误。我不确定它是如何工作的,因为我认为每个函数都是:(1..50).each do | movie |应该给我每50部电影的信息。 – Em774

相关问题