conversion de string a array mediante eval

2 views
Skip to first unread message

Germán Alberto Gimenez Silva

unread,
Oct 19, 2015, 11:25:19 AM10/19/15
to rub...@googlegroups.com
Buenas una consulta sobre un problema de tipos calculo yo:
estoy intentando sacar información de un registro donde almaceno la geo localización por IP

el campo contiene esta información:

irb(main):061:0> Trace.first.geo
  Trace Load (1.8ms)  SELECT  "traces".* FROM "traces"  ORDER BY "traces"."id" ASC LIMIT 1
=> "{\"ip\"=>\"181.228.18.93\", \"country_code\"=>\"AR\", \"country_name\"=>\"Argentina\", \"region_code\"=>\"C\", \"region_name\"=>\"Buenos Aires F.D.\", \"city\"=>\"Buenos Aires\", \"zip_code\"=>\"1871\", \"time_zone\"=>\"America/Argentina/Buenos_Aires\", \"latitude\"=>-34.604, \"longitude\"=>-58.382, \"metro_code\"=>0}"
irb(main):062:0> eval(Trace.first.geo)

Cuando quiero convertirla en un arreglo sucede esto:

irb(main):061:1a =  eval(Trace.last.geo)
  Trace Load (1.5ms)  SELECT  "traces".* FROM "traces"  ORDER BY "traces"."id" DESC LIMIT 1
=> {"ip"=>"181.228.27.17", "country_code"=>"AR", "country_name"=>"Argentina", "region_code"=>"C", "region_name"=>"Buenos Aires F.D.", "city"=>"Buenos Aires", "zip_code"=>"1871", "time_zone"=>"America/Argentina/Buenos_Aires", "latitude"=>-34.604, "longitude"=>-58.382, "metro_code"=>0}

irb(main):066:0> a.values[4]
=> "Buenos Aires F.D."

Bien ahora quiero recorrer todos para sacar un registro:

SyntaxError in CitiesController#index
(eval):1: syntax error, unexpected end-of-input, expecting ']' ...tro_code"=>0}, @cache_hit=nil>] ... ^

@trace = Trace.all
   @trace.each do |reg|
      if reg.geo
        @country = eval(reg.geo).values[2]
      end
end

Si a alguien se le ocurre que puede ser le agradezco la respuesta.

* ambas respuestas son "String"

--
Giménez Silva Germán Alberto

Germán Alberto Gimenez Silva

unread,
Oct 19, 2015, 11:52:15 AM10/19/15
to rub...@googlegroups.com
Listo y aclaración,

el problema es que en un registro se habia colado por algún motivo un dato completamente mal:  geo: "[#<Geocoder::Result::Freegeoip:0x00557e02839e30 @d...">] por lo cual lanzaba una excepción en el momento de conversion.

Saludos.

Gaston Ramos

unread,
Oct 20, 2015, 9:00:34 AM10/20/15
to rub...@googlegroups.com

Por que lo que te retorna es un hash no un array.

--
Nuestra página web es: http://rubylit.github.io/
 
Para anular la suscripción a este grupo, envía un mensaje a rubylit-u...@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "rubylit" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a rubylit+u...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages