GET引数をハッシュに変えたい
実は、頻繁にやるんだけど、毎回適当に行っていて、これといった方法を決めてなかったので、ちゃんと方法を決めることにする。
require 'uri' module URI class << self alias :_parse :parse def parse a, original=false return self._parse a if original r=/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+/ a = a.gsub(r){|m| URI.encode_www_form_component(m) } u = self._parse a if u.query q = u.query q = q.split(/&/) q = q.map{|e| n = e e = e.split(/=/,2) e<<nil unless e.size%2==0 e } q= q.flatten q = Hash[*q] def q.to_str self.map{|e|e.join('=')}.join('&') end u.query = q end return u end end class Genric # alias :_query= :query= end end class URI::Generic alias :_query= :query= def query=(v) return @query = v if v.class == Hash return self._query=(v) end end
実行するとHashで返してくれる。
=>{ "flow"=>"recipe_ingredient_list", "p"=>"1", "ingredient_vals"=>"%u3058%u3083%u304C%u3044%u3082%5B-%5D", "ingredient_ids"=>"1_18%5B-%5D" }
出来ることは出来たが、ruby ってやっぱり面倒くさい。もっとスマートな解決方法はないのかなぁ