2014-11-05 92 views
0

由哈希我有一个查询字符串,如下所示的URL:提取红宝石

http://localhost:3000/events?appointment_practices%5B10%5D=Injury&appointment_practices%5B18%5D=Immigration&appointment_practices%5B8%5D=Bankruptcy 

appointment_practices其实是我一个重定向时插入查询字符串的哈希:

appointment_practices = practices.reduce({}) do |acc, practice| 
    acc[practice.id] = practice.class.name 
    acc 
end 
redirect_to events_path(appointment_practices: appointment_practices) 

现在我想分析该查询字符串。当我试图用decode_www_form解析它,它返回一个零元素的数组:

[nil] 

这是给我的零元素的代码:

@http_refer = @_env['HTTP_REFERER'] 
begin 
    uri = URI.parse @http_refer 
    practices = Hash[URI::decode_www_form(uri.query)].values_at('appointment_practices') 
    puts "practices: #{practices}" 
rescue StandardError 
end 

我试图提取哈希值。例如,在appointment_practices%5B10%5D =伤害中,id是10,练习是伤害。

除了正则表达式,我还有其他的选择吗?

回答

1

您可以使用Rack::Utils.parse_nested_query

require 'uri' 
require 'rack' 

uri = URI.parse('http://localhost:3000/events?appointment_practices%5B10%5D=Injury&appointment_practices%5B18%5D=Immigration&appointment_practices%5B8%5D=Bankruptcy') 
Rack::Utils.parse_nested_query(uri.query) 
#=> {"appointment_practices"=>{"10"=>"Injury", "18"=>"Immigration", "8"=>"Bankruptcy"}} 
+0

我与机架周围涉足:: Utils.parse_query。但你有什么看起来更好。 – Donato 2014-11-05 22:19:04