2011-05-27 9 views
19

रेल 'यूआरएल पीढ़ी तंत्र (जिनमें से अधिकांश कुछ बिंदु पर polymorphic_url के माध्यम से मार्गों) एक हैश के गुजरने कि कम से कम प्राप्त अनुरोधों के लिए एक क्वेरी स्ट्रिंग में धारावाहिक रूप हो जाता है के लिए अनुमति देता है। उस तरह की कार्यक्षमता प्राप्त करने का सबसे अच्छा तरीका क्या है, लेकिन किसी भी आधार पथ के शीर्ष पर?क्या रूबी लाइब्रेरी/मणि है जो पैरामीटर के सेट के आधार पर एक यूआरएल उत्पन्न करेगा?

उदाहरण के लिए, मैं की तरह कुछ करना चाहते हैं निम्नलिखित:

generate_url('http://www.google.com/', :q => 'hello world') 
    # => 'http://www.google.com/?q=hello+world' 

मैं निश्चित रूप से अपने ही लिख सकता है कि सख्ती से सूट अपने आवेदन की आवश्यकताओं, लेकिन यदि इसके बारे में देखभाल करने के लिए कुछ विहित पुस्तकालय अस्तित्व में , मैं इसका उपयोग करना चाहूंगा :)।

उत्तर

31

हाँ, रूबी के मानक पुस्तकालय में आप कक्षाओं की एक पूरी मॉड्यूल यूआरआई के साथ काम करने के लिए मिल जाएगा। HTTP के लिए एक है। आप कुछ तर्कों के साथ #build पर कॉल कर सकते हैं, जैसा कि आपने दिखाया है।

http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/HTTP.html#M009497

क्वेरी स्ट्रिंग खुद के लिए, बस रेल 'हैश अलावा #to_query का उपयोग करें। अर्थात

uri = URI::HTTP.build(:host => "www.google.com", :query => { :q => "test" }.to_query) 
+1

अद्भुत! मैं नहीं कह सकता कि मैंने पहले कभी यूआरआई मॉड्यूल देखा है, इसलिए यह बहुत अच्छा है। –

+2

'# के लिए अपरिभाषित विधि 'to_query' <हैश: 0x1c943d0> (NoMethodError)' – Nakilon

+0

@Nakilon रेल के किस संस्करण का उपयोग कर रहे हैं? – d11wtq

2

पार्टी के लिए देर हो चुकी है, लेकिन मुझे अत्यधिक Addressable मणि सलाह देते हैं। इसकी अन्य उपयोगी विशेषताओं के अलावा, यह RFC 6570 URI templates के माध्यम से यूरी के लेखन और विश्लेषण को समर्थन देता है। दिए गए उदाहरण के लिए अनुकूलित करने के लिए, कोशिश:

gsearch = Addressable::Template.new('http://google.com/{?query*}') 
gsearch.expand(query: {:q => 'hello world'}).to_s 
# => "http://www.google.com/?q=hello%20world" 

या

gsearch = Addressable::Template.new('http://www.google.com/{?q}') 
gsearch.expand(:q => 'hello world').to_s 
# => "http://www.google.com/?q=hello%20world" 
+0

जाँच कृपया इस [URL] पर (http://stackoverflow.com/help) यह आपकी सामग्री गुणवत्ता –

+0

उसकी सफाई और कहा कि उदाहरण बढ़ाने के लिए उपयोगी होगा। धन्यवाद @ विली! – wobh

+0

मैंने देखा कि थोर मणि केवल रूबी 1.8 के लिए एड्रेसेबल का उपयोग करता है। क्या उसके बाद कुछ जोड़ा गया था ताकि इसकी आवश्यकता नहीं थी? – labyrinth

संबंधित मुद्दे