2012-01-10 13 views
10

Ejemplo HashObtener clave hash y se convierten en cadena de rubí

hash = {:key => ["val1", "val2]} 

Cuando hice esto en los carriles 3.0.7, que estaba bien.

> hash.keys.to_s 
=> "key" 
> hash[hash.keys.to_s] 
=> ["val1", "val2"] 

Pero si hago esto con los carriles 3.1.3, no lo es.

> hash.keys.to_s 
=> [\"key\"] 
> hash[hash.keys.to_s] 
=> nil 

¿Es esto era debido a la versión rieles cambiado? y ¿Hay alguna otra forma de convertir la clave hash en una cadena que funcione con ambas versiones (o con raíles 2 también)?

+1

Fwiw, el comportamiento actual es más correcto, y el answe es en gran parte evidente por sí mismo: "keys" es plural, y debería ser una colección. –

+0

Sí, Dave, debería notarlo. Gracias por el recordatorio !!! –

Respuesta

15

¿Has actualizado Ruby y Rails? Creo que esto es un cambio entre el 1,8 y el 1,9

Trate hash.keys.first.to_s (si siempre hay una sola tecla) o hash.keys.join

+0

Ahh, sí. Olvidé decirte que eran [email protected] y [email protected] –

+0

Ambas respuestas están funcionando. Thx amigo !! –

3

Simplemente necesita para convertirlo en un símbolo en lugar de una cadena que está siendo más correcto:

hash[hash.keys.to_sym] 
+0

Thx por respuesta, pero no funciona en Ruby 1.9.2, Rails 3.1.3. hash.keys.to_sym se mostrará y error, método indefinido 'to_sym' para [: key]: matriz –

Cuestiones relacionadas