2015-10-21 5 views
5

में हैश से क्वेरी तर्कों के साथ यूआरआई कैसे बनाया जाए, हैश पास करके क्वेरी तर्कों के साथ यूआरआई ऑब्जेक्ट का निर्माण कैसे करें? जो उत्पन्न करता हैरूबी

https://example.com?a=argument1&b=argument2

लेकिन मैं क्वेरी स्ट्रिंग निर्माण लगता है कि कई तर्क के लिए अपठनीय और बनाए रखने के लिए मुश्किल होगा

URI::HTTPS.build(host: 'example.com', query: "a=#{hash[:a]}, b=#{[hash:b]}")

:

मैं के साथ क्वेरी उत्पन्न कर सकते हैं। मैं हैश पास करके क्वेरी स्ट्रिंग बनाना चाहता हूं। जैसा कि नीचे उदाहरण में:

hash = { 
    a: 'argument1', 
    b: 'argument2' 
    #... dozen more arguments 
} 
URI::HTTPS.build(host: 'example.com', query: hash) 

जो

NoMethodError: undefined method `to_str' for {:a=>"argument1", :b=>"argument2"}:Hash 

को जन्म देती है यह यूआरआई एपीआई का उपयोग कर हैश के आधार पर क्वेरी स्ट्रिंग के निर्माण के लिए संभव है? मैं पैच हैश ऑब्जेक्ट बंदर नहीं चाहता ...

उत्तर

8

हैश पर '#to_query' पर कॉल करें।

hash = { 
    a: 'argument1', 
    b: 'argument2' 
    #... dozen more arguments 
} 
URI::HTTPS.build(host: 'example.com', query: hash.to_query) 

=> https://example.com?a=argument1&b=argument2

आप रेल का उपयोग नहीं कर रहे हैं, तो याद require 'uri'

+7

'to_query है 'एक रेल केवल विधि है। यह रूबी में मौजूद नहीं है। –

+1

@marc_ferna प्रश्नों में रेल टैग पर रूबी है। आप शामिल कर सकते हैं: गैर-रेल परियोजनाओं में सक्रिय समर्थन –

1

उन रेल या सक्रिय समर्थन का उपयोग नहीं करने के लिए के लिए, रूबी मानक पुस्तकालय का उपयोग कर समाधान

hash = { 
    a: 'argument1', 
    b: 'argument2' 
} 
URI::HTTPS.build(host: 'example.com', query: URI.encode_www_form(hash)) 
=> #<URI::HTTPS https://example.com?a=argument1&b=argument2>