Почему я не могу получить доступ к элементу из этого хэша Ruby? - PullRequest
1 голос
/ 13 марта 2011

У меня есть структура данных, которая выглядит следующим образом:

@results['events'].each do |event|
  event.inspect
end
["event", {"modified"=>"2011-03-04 12:39:13", "groups"=>nil, "country_name"=>"United States", "city_name"=>"Morrison", "latitude"=>39.653992, "title"=>"Red Rocks Indian Art Show", "region_name"=>"Colorado"}] 

OR

@results['events']['event'].each do |event|
  event.inspect
end
["modified", "2011-03-04 12:39:13"] ["groups", nil] ["country_name", "United States"] ["city_name", "Morrison"] ["latitude", 39.653992] ["title", "Red Rocks Indian Art Show"]

Я бы подумал, что мог бы сделать что-то вроде этого:

@results['events']['event'].each do |event|
  event['modified']
end

Но когда я это понимаю, я получаю это: невозможно преобразовать строку в целое число в строке, содержащей: event['modified']

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 13 марта 2011

inspect возвращает строку.each отбрасывает значения, возвращаемые из блока, так что на самом деле вы видите значение объекта, для которого вызывается each.Используйте p obj для печати obj.

Вы получаете «невозможно преобразовать строку в целое число», потому что если вы вызываете each в Hash экземпляре и передаете в него блок с одним параметром, этот блок вызывается с массивом, представляющим пару ключ-значение (например,[key, value]).В event['modified'] вы пытаетесь получить значение из массива, используя индекс String.Массивы принимают только целочисленные индексы, поэтому Ruby пытается выполнить преобразование и завершается неудачей.

То, что вы хотите, это

@results['events']['event'].each do |eventProperty, eventPropertyValue|
  # do something here
end
0 голосов
/ 13 марта 2011

Rails допускает только числовые индексы для массивов.

Попробуйте перестроить структуру данных следующим образом:

events = [
           {
             :name => "event",
             :modified => "2011-03-04 12:39:13",
             :groups => nil,
             :country_name => "United States",
             :city_name => "Morrison",
             :latitude => 39.653992,
             :title => "Red Rocks Indian Art Show",
             :region_name => "Colorado"
           }
         ]

Имеет смысл иметь массив хэшей: по одному хешу на событие. Кроме того, использование символов в качестве ключей хеш-функции является более понятным и эффективным.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...