2011-05-18 2 views
15

Si je convertis un hachage en chaîne de requête, comment puis-je le reconvertir?Rails: à l'opposé de Hash # to_param

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

Rails semble faire automatiquement quand il renseigne le hachage params, mais est-il possible d'appeler directement cette méthode?

Merci.

Répondre

29

Vous recherchez Rack::Utils.parse_nested_query(query), qui le transformera en Hash. Vous pouvez l'obtenir en utilisant cette ligne:

require 'rack/utils' 
+0

'rack :: Utils.build_nested_query ('filtres [couleur] [] = Red & filtres [color] [] = Blue & filtres [size] = Moyen')' aboutit à 'ArgumentError: la valeur doit être un Hash'. Qu'est-ce que je fais mal? – gjb

+0

Ahh, je vois que vous avez édité votre réponse. 'parse_nested_query' fonctionne parfaitement, merci! – gjb

+0

@gjb: ouais désolé ma mauvaise, je comprends les deux confus tout le temps. –

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

Bon, mais pas tout à fait là. Cela ne génère pas de hachage avec une clé de filtre qui a un hachage avec une clé de couleur qui a un * tableau * comme valeur ... ce que fait 'Rack :: Utils.parse_nested_query'. –