2011-04-13 11 views
6

में पैरामीटर की सरणी पढ़ने अगर मैं नीचे की तरह यूआरएल कुछ है:आतंक विरोधी

http://test.com?x=1&x=2&x=3&x=4&x=5&x=6&x=7 

तो कैसे मैं सभी "x" मान पढ़ सकते हैं?

जोड़ा गया नया टिप्पणी: आपके सभी उत्तरों के लिए धन्यवाद। मैं मूल रूप से जावा और नेट पृष्ठभूमि से हूं और हाल ही में रुबी और रेल देख रहा हूं। जावा में की तरह, हमारे पास अनुरोध के समान कुछ नहीं है .getParameterValues ​​("x");

+1

क्या आपका यूआरएल http: //test.com? x = 1,2,3,4,5,6,7' नहीं होना चाहिए, या कुछ ऐसा ही होना चाहिए? – ANeves

+1

क्या यह एक रेल http अनुरोध है और आप अपनी क्रिया में एक्स को पार्स करना चाहते हैं या आपके पास स्ट्रिंग के रूप में यूआरएल है और इसे पार्स करना चाहते हैं? –

+2

नहीं, रेल के पास अनुरोध नहीं है .getParameterValues ​​("x") कार्यक्षमता। PHP की तरह, इसे "[]" प्रत्यय के साथ निर्दिष्ट करने के लिए क्वेरी पैरामीटर की आवश्यकता होती है यदि उनके लिए कई मान हों। ईमानदारी से, मैंने हमेशा यह परेशान होने के लिए पाया है, क्योंकि इसका मतलब है कि आप बिना किसी लिखे गए लिखित अंत में लिखे गए बैक एंड को प्रतिस्थापित कर सकते हैं, बिना रेल के उपयोग के लिखे गए (यदि आप एकाधिक मूल्यवान पैराम पैटर्न का उपयोग करते हैं) तो फ्रंट एंड में बदलाव करते हैं। – RHSeeger

उत्तर

3

इसे स्ट्रिंग, लेकिन नहीं एक http अनुरोध

है अगर यह करें: आप उन्हें पूर्णांकों में बदलने के लिए चाहते हैं

url = 'http://test.com?x=1&x=2&x=3&x=4&x=5&x=6&x=7' 

p url.split(/(?:\A.*?|&)x=/).drop(1) 

, कार्य करें:

p url.split(/(?:\A.*?|&)x=/).drop(1).map(&:to_i) (ruby 1.9) 

या

p url.split(/(?:\A.*?|&)x=/).drop(1).map{|v| v.to_i} 
+0

क्षमा करें मैंने आपकी टिप्पणी संपादित की है – fl00r

+0

@ fl00r आपका पिछला संपादन वास्तव में उपयोगी था। – sawa

2

इसे स्ट्रिंग, लेकिन नहीं एक http अनुरोध मैं भले ही लेखक कैसे अनुरोध URL का पैरामीटर को संभालने के लिए पता नहीं है की कल्पना नहीं की थी है अगर ...

url = "http://test.com?x=1&x=2&x=3&x=4&x=5&x=6&x=7" 
vars = url.scan(/[^?](x)=([^&]*)/) 
#=> [["x", "2"], ["x", "3"], ["x", "4"], ["x", "5"], ["x", "6"], ["x", "7"]] 
x = vars.map{|a| a[1]} 
#=> ["2", "3", "4", "5", "6", "7"] 
x.map!(&:to_i) 
#=> [2, 3, 4, 5, 6, 7] 

या यदि आप को निकालने के लिए की जरूरत है valuse केवल:

vars = url.scan(/[^?]x=([^&]*)/).flatten 
#=> ["2", "3", "4", "5", "6", "7"] 
vars = url.scan(/[^?]x=([^&]*)/).flatten.map(&:to_i) 
#=> [2, 3, 4, 5, 6, 7] 
+2

मेरा संपादन करने के लिए धन्यवाद। ऐसा लगता है कि कोई हमें कम कर रहा है। अगर प्रश्न का मतलब स्ट्रिंग नहीं था, तो सवाल संदिग्ध था। इसके कारण हमें कम नहीं किया जाना चाहिए। – sawa

+0

यह गलती से था :) और मैं पूरी तरह से सहमत हूं :) +1 – fl00r

+0

आपके सभी उत्तरों के लिए धन्यवाद। मैं मूल रूप से जावा और नेट पृष्ठभूमि से हूं और हाल ही में रुबी और रेल देख रहा हूं। जावा में की तरह, हमारे पास अनुरोध के समान कुछ नहीं है .getParameterValues ​​("x"); –

26

आप निम्न uRL के बजाय तुम्हारा उपयोग करना चाहिए:

http://test.com?x[]=1&x[]=2 

और फिर आप एक के रूप में इन पैरामीटर मिलेगा रे:

p params[:x] # => ["1", "2"] 
+0

सहमत हुए। रेलों के संदर्भ में यह समझ में आता है –

+0

मैंने पाया कि रेल 4.2.5 ब्रैकेट के क्रमिकरण को समझता है, इसलिए पैरा [: x] अभी भी काम करता है भले ही मेरे स्क्वायर ब्रैकेट को यूआरएल में क्रमबद्ध किया जा रहा हो। मैं AngularJS का उपयोग कर रहा हूं जो x [] को x% 5B% 5D में परिवर्तित कर रहा था। – Usagi

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