Рубин. Трещины драгоценный камень. - в `<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