Rieles, encontrar objetos en hashes complejos
-
06-07-2019 - |
Pregunta
Estoy creando una aplicación que se integra con Highrise, y hasta ahora tan buena, sin embargo, cuando intento importar una persona Highrise :: People
escupe un hash enorme similar a esto:
[ ..., #<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={}>, ... ]
Parece que justo dentro de cada Highrise :: Person
hay un @attributes
que es otro Highrise :: Person :: ContactData
, que es otro @attributes
con matrices como email_addresses []
y phone_numbers []
, así como claves / valores simples ...
Lamento ser tan confuso, lo que quiero saber es ¿cómo podría obtener el first_name
de cada persona de un hash como este?
Probablemente súper simple, estoy confundido ...
Update
Creo que una mejor manera de expresarlo sería, dado el hash anterior, ¿por qué no funciona esto?
@people = Highrise::Person.find(:all)
for person in @people do
person.attributes["first_name"]
end
Solución
Si tu lista es un conjunto de personas
yourlist.each do |person|
puts person.attributes["first_name"]
end
Si Persona tiene un attr_reader, es decir.
Otros consejos
También puedes hacer:
@people.each do |person|
puts person.first_name
end