2017-09-04 238 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

相關問題