Rails, Поиск объектов в сложных хэшах
-
06-07-2019 - |
Вопрос
Я создаю приложение, которое интегрируется с Highrise и, тем не менее, пока работает очень хорошо при попытке импортировать пользователя Highrise::People
он выплевывает огромный хэш, похожий на этот:
[ ..., #<Highrise::Person:0x1035084b8 @attributes={"contact_data"=>#<Highrise::Person::ContactData:0x1034f8b30 @attributes={"email_addresses"=>[], "addresses"=>[], "web_addresses"=>[], "phone_numbers"=>[], "twitter_accounts"=>[], "instant_messengers"=>[]}, @prefix_options={}>, "created_at"=>Sat Nov 28 05:38:26 UTC 2009, "title"=>"president", "updated_at"=>Sat Nov 28 05:38:27 UTC 2009, "background"=>"asdfasdfadsfas", "id"=>27569370, "owner_id"=>nil, "group_id"=>nil, "company_id"=>27569371, "last_name"=>"Doe", "author_id"=>192208, "visible_to"=>"Everyone", "first_name"=>"John"}, @prefix_options={}>, ... ]
Это выглядит так прямо внутри каждого Highrise::Person
является @attributes
что является еще одним Highrise::Person::ContactData
, который сам по себе является другим @attributes
с массивами типа email_addresses[]
и phone_numbers[]
а также простые ключи / значения...
Извините, что я так сбиваю с толку, но я хочу знать, как бы мне просто получить first_name
каждого человека из такого хэша, как этот?
Наверное, очень просто, я просто в замешательстве...
Обновить
Я думаю, лучшим способом сформулировать это было бы, учитывая приведенный выше хэш, почему это не сработает:
@people = Highrise::Person.find(:all)
for person in @people do
person.attributes["first_name"]
end
Решение
Если ваш список представляет собой совокупность Лиц
yourlist.each do |person|
puts person.attributes["first_name"]
end
Если Человек то есть имеет attr_reader .
Другие советы
Вы также можете сделать:
@people.each do |person|
puts person.first_name
end