2011-03-09 12 views
8

मैं क्वेरी पैराम्स के कुछ स्वच्छता करना चाहता हूं।रूबी की CGI.parse विधि के ठीक विपरीत?

मैं CGI.parse के साथ क्वेरी को पार्स करता हूं, फिर मैं कुछ पैरा हटा देता हूं, लेकिन मुझे क्वेरी बनाने के लिए एक विपरीत विधि नहीं मिल रही है।

मैं नहीं है वास्तव में की तरह

params.map{|n,v| "#{CGI.escape n}=#{CGI.escape v.to_s}"}.join("&") 

वहाँ एक आसान तरीका हो गया है कुछ करना चाहता हूँ। है?

उत्तर

2

हालांकि कोई बेहतर जवाब नहीं है, मैं अब जिस विधि का उपयोग कर रहा हूं उसे रखूंगा।

def build_query(params) 
    params.map do |name,values| 
    values.map do |value| 
     "#{CGI.escape name}=#{CGI.escape value}" 
    end 
    end.flatten.join("&") 
end 
+0

यह अच्छी तरह से काम करता है। –

3

आप रेल उपयोग कर रहे हैं (या ActiveSupport में खींच कोई आपत्ति नहीं है), तो आप to_param (AKA to_query) उपयोग कर सकते हैं: थोड़ा अलग तरह से अपनी संस्करण की तुलना में हालांकि

{ :a => '&', :b => 'Where is pancake house?', :c => ['an', 'array'] }.to_param 
# a=%26&b=Where+is+pancake+house%3F&c%5B%5D=an&c%5B%5D=array 

to_param संभालती सरणियों, यह ' c=an&c=array की बजाय c[]=an&c[]=array डाल देंगे।

0

मुझे यकीन नहीं है कि निम्नलिखित एक सरलीकरण है, लेकिन यह हैश के (कुंजी, मूल्य) जोड़े को विस्तारित करने से बचाता है।

params.map{|qq| qq.map{|q| CGI.escape(q)}.join('=')}.join('&') 
5

वहाँ यूआरआई मॉड्यूल में एक अच्छा तरीका है:

require 'uri' 
URI.encode_www_form("q" => "ruby", "lang" => "en") #=> "q=ruby&lang=en" 
संबंधित मुद्दे