2009-11-28 2 views
0

Я создаю приложение, которое интегрируется с Highrise и так далеко вперед, однако при попытке импортировать человека Highrise::People он выплескивает огромный хэш, похожий на это:Rails, Поиск объектов в сложных хэшах

[ ..., #<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 каждого человека из хэша, как это?

Вероятно, супер просто, я просто запуталась ...

Update

Я думаю, лучший путь к фразе было бы, учитывая выше хэш, почему не будет эта работа:

@people = Highrise::Person.find(:all) 

for person in @people do 
    person.attributes["first_name"] 
end 

ответ

1

Если yourlist является массивом лиц

yourlist.each do |person| 
    puts person.attributes["first_name"] 
end 

Лицо имеет attr_reader, то есть.

0

Вы также можете сделать:

@people.each do |person| 
    puts person.first_name 
end