Рубин. Трещины драгоценный камень. - в `<main>': неопределенный метод`[]' для nil:NilClass (NoMethodError) -

Уважаемое сообщество stackru,

Вопрос новичка: почему я получаю следующую ошибку?

scraper_sample_2.rb:7:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)
>Exit code: 1

Вот мой код (скопированный из вводного руководства ruby):

require "rubygems"
require "crack"
require "open-uri"

URL = "http://www.recovery.gov/pages/GetXmlData.aspx?data=recipientHomeMap"

Crack::XML.parse(open(URL).read)["totals"]["state"].each do |state|
    puts ["id", "awarded", "received", "jobs"].map{|f| state[f]}.join(",")
end

2 ответа

Так как Crack::XML.parse(open(URL).read)["totals"] является nil, Попробуйте разделить вызов, который вы делаете в строке 7, на несколько строк и отладить каждый вызов отдельно. Возможно, вы получите ответ не тот, который вы ожидаете.

Учитывая формат XML, возвращенный из вашего источника, Crack::XML.parse(open(URL).read)["totals"] вернется, как сказал Ивайло nil, Формат xml должен быть изменен, так как totals сейчас в /map/view,

Чтобы получить ожидаемый результат, измените код на:

Crack::XML.parse(open(URL).read)["map"]["view"]["totals"]["state"].each do |state|
    puts ["id", "awarded", "received", "jobs"].map{|f| state[f]}.join(",")
end
Другие вопросы по тегам