Это терпит неудачу, потому что с помощью .each
на Hash дает кортеж ключа и значения.
hash = {
"Element" => {
"499723" => {
"Name" => "A",
},
"499725" => {
"Name" => "B",
},
}
}
hash["Element"].each do |id|
p id
end
["499723", {"Name"=>"A"}]
["499725", {"Name"=>"B"}]
Таким образом, вы должны использовать
hash["Element"].each do |id, value|
# ...
end
Если значение не требуется
hash["Element"].each do |id, _|
# ...
end
Однако, вы можете сохранить значение и получить доступ к нему непосредственно
hash["Element"].each do |id, value|
h[id] = value["Name"]
end
Простым решением в вашем случае является использовать Enumberable#each_with_object
в сочетании с предыдущей информацией:
hash["Element"].each_with_object({}) do |(id, value), acc|
acc[id] = value["Name"]
end
# => {"499723"=>"A", "499725"=>"B"}
Вы получаете вниз голоса на ваш вопрос, потому что это можно было высчитать по чтению [документация] (HTTP: // рубиново-доку. org/core-2.3.1/Hash.html # method-i-each) для «каждого» Хэша. «[Насколько ожидаются усилия по исследованию пользователей Stack Overflow?] (Http://meta.stackoverflow.com/q/261592/128421)« поможет объяснить, почему. –