2013-04-17 38 views
3

我已经转身,使用to_query方法将哈希变成了params。Rails什么是to_query方法的对手?

如何将它变回散列?

我已经试过这样:

require 'rack' 
@tester = Rack::Utils.parse_nested_query(params[:search]) 

鉴于:<%= @tester.class %>

其中给出NilClass。

的参数是:

"search"=>"fields%5B%5D=exhb_0&fields%5B%5D=exh0_1&fields%5B%5 
D=t_g_a&fields%5B%5D=hp_1&fields%5B%5D=s1&fields%5B%5D=overflade_0&railing%5B%5D 
=A-3&railing_m=0&type%5B%5D=ltrappa&wood%5B%5D=wood_6" 

回答

8

这是this questions重复:只需使用:

Rack::Utils.parse_query(my_query_string) 

为了解码在你的榜样行,请务必先取消转义字符串:

require 'rack' 

my_string = 'fields%5B%5D=exhb_0&fields%5B%5D=exh0_1&fields%5B%5D=t_g_a&fields%5B%5D=hp_1&fields%5B%5D=s1&fields%5B%5D=overflade_0&railing%5B%5D=A-3&railing_m=0&type%5B%5D=ltrappa&wood%5B%5D=wood_6' 

unescaped_string = URI.unescape(my_string) 
# => "fields[]=exhb_0&fields[]=exh0_1&fields[]=t_g_a&fields[]=hp_1&fields[]=s1&fields[]=overflade_0&railing[]=A-3&railing_m=0&type[]=ltrappa&wood[]=wood_6" 

params_hash = Rack::Utils.parse_query(unescaped_string) 
# => {"fields[]"=>["exhb_0", "exh0_1", "t_g_a", "hp_1", "s1", "overflade_0"], "railing[]"=>"A-3", "railing_m"=>"0", "type[]"=>"ltrappa", "wood[]"=>"wood_6"} 
+1

summea,是的,看起来是这样的。我更新了答案。 – gmile

+0

刚刚尝试过,仍然是NilClass ... –

+0

Rails初学者,你使用的是什么版本的机架? – gmile

相关问题