2011-05-18 8 views
15

Si convierto un hash en una cadena de consulta, ¿cómo puedo volver a convertirlo?Rieles: opuesto a Hash # to_param

{:filters => {:colour => ['Red', 'Blue'], :size => 'Medium'}}.to_param 
=> "filters[colour][]=Red&filters[colour][]=Blue&filters[size]=Medium" 

rieles parece hacer esto de forma automática cuando se rellena el hash params, pero es posible llamar a este método directamente?

Gracias.

Respuesta

29

Está buscando Rack::Utils.parse_nested_query(query), que lo convertirá nuevamente en Hash. Se puede conseguir mediante el uso de esta línea:

require 'rack/utils' 
+0

'rack :: Utils.build_nested_query ('filtros [color] [] = rojo y filtros [color] [] = azul y filtros [size] = Medium')' resulta en 'ArgumentError: value debe ser un Hash'. ¿Qué estoy haciendo mal? – gjb

+0

Ahh, veo que has editado tu respuesta. 'parse_nested_query' funciona perfectamente, gracias! – gjb

+0

@gjb: sí, lo siento mal, me confundo todo el tiempo todo el tiempo. –

1
query_string = "filters[colour][]=Red&filters[colour][]=Blue&filters[size]=Medium" 
CGI::parse(query_string) 
+1

Bueno, pero no del todo allí. Esto no genera un hash con una clave de filtros que tiene un hash con una clave de color que tiene una * matriz * como valor ... que es lo que hace 'Rack :: Utils.parse_nested_query'. –