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

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

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

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

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

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

person user2224121    schedule 29.03.2013    source источник


Ответы (2)


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

person Ivaylo Strandjev    schedule 29.03.2013

Учитывая формат 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
person Sébastien Le Callonnec    schedule 30.03.2013