Rotaie, ricerca di oggetti in hash complessi
-
06-07-2019 - |
Domanda
Sto costruendo un'app che si integra con Highrise, e finora così buona, quando provo a importare una persona Highrise :: People
sputa un enorme hash simile a in questo modo:
[ ..., #<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={}>, ... ]
Sembra che proprio all'interno di ogni Highrise :: Person
sia presente un @attributes
che è un altro Highrise :: Person :: ContactData
, che a sua volta è un altro @attributes
con array come email_addresses []
e phone_numbers []
nonché semplici chiavi / valori ...
Mi dispiace essere così confuso, quello che voglio sapere è come potrei ottenere il first_name
di ogni persona da un hash come questo?
Probabilmente super semplice, sono solo confuso ...
Aggiorna
Immagino che un modo migliore per esprimerlo sarebbe, dato l'hash sopra, perché non funziona:
@people = Highrise::Person.find(:all)
for person in @people do
person.attributes["first_name"]
end
Soluzione
Se la tua lista è una matrice di persone
yourlist.each do |person|
puts person.attributes["first_name"]
end
Se Persona ha un attr_reader, cioè.
Altri suggerimenti
Puoi anche fare:
@people.each do |person|
puts person.first_name
end