2012-06-19 14 views
7

मेरे पास एक खोज फ़ॉर्म है, जिसमें कई विकल्प हैं, अनुरोध प्राप्त करने के साथ एक मार्ग पर सबमिट किया गया है। यूआरएल इस तरह कुछ है:क्वेरी स्ट्रिंग से रिक्त मान पैराम को कैसे हटाएं

http://localhost:3000/restaurants/search?utf8=%E2%9C%93&city=&cuisine=&number_of_people=&query=hello 

बहुत अधिक पैरा के साथ। मैं इसे साफ करने के लिए कुछ पैराम को हटाने की तरह कुछ साफ करना चाहता हूं।

कुछ इस तरह: (मूल रूप से सभी पैरामीटर जो खाली हैं को हटाने)

http://localhost:3000/restaurants/search?query=hello 

यह कैसे करना है?

एक तरह से

CGI::parse("foo=bar&bar=foo&hello=hi") 

का उपयोग कर किया जा सकता है आप में एक में पर

{"foo"=>["bar"], "hello"=>["hi"], "bar"=>["foo"]} 

पहले रीडायरेक्ट उपयोगकर्ता देता कार्रवाई के बीच और उस में कार्रवाई की जांच जो पैरामीटर खाली कर रहे हैं और उन्हें हटाने और फिर बीच आखिर में खोज की वास्तविक कार्रवाई पर उसे पुनर्निर्देशित किया। लेकिन यह बहुत लंगड़ा लगता है। मैं इसे बेहतर तरीके से कैसे कर सकता हूं?

+0

क्यों खाली मूल्यों समस्या कर रहे हैं? –

+0

@SergioTulentsev यूआरएल को और अधिक साफ करने के लिए .. –

+0

@SergioTulentsev इसका एक खोज फ़ॉर्म है। एक बार उपयोगकर्ता फॉर्म जमा करें। सब आता है। –

उत्तर

1
बस सादे ol 'माणिक के साथ

...

require 'uri' 
a = "http://localhost:8080/path/search?foo=&bar=&baz=2&bat=thing" 
u = URI.parse(a) 
params = u.query.split("&").select {|param| param =~ /=./}.join("&") 
# Returns "baz=2&bat=thing" 
+0

इसके लिए काम नहीं कर रहा है: http: // localhost: 3000/रेस्तरां/खोज? Utf8 =% ई 2% 9 सी% 9 3 और शहर = और व्यंजन = और number_of_people = और बुकिंग% 5Bdate_of_booking% 5 डी = 1 9 + जून + 2012 और बुकिंग% 5Btime_of_booking% 281i% 2 9% 5 डी = & बुकिंग% 5Btime_of_booking% 282i% 29% 5D = & बुकिंग% 5Btime_of_booking% 283i% 29% 5D = & बुकिंग% 5Btime_of_booking% 284i% 29% 5D = & बुकिंग% 5Btime_of_booking% 285i% 29% 5D = & बुकिंग% 5Btime_of_booking% 287i% 29% 5D = -2 और क्वेरी = और प्रतिबद्ध = –

+0

सबमिट करें यह ठीक काम करता है। –

+1

मैंने 'params.select किया! {| K, v | v.present?} 'जो एक ही परिणाम प्राप्त करता है, लेकिन मुझे नहीं पता कि प्रतिक्रिया यूआरएल को कैसे साफ किया जाए। – juanpastas

0

मेरा सुझाव है, अगर सिर्फ सादे पुराने माणिक को देखते हुए, एक सरल gsub पर्याप्त हो सकता है:

url.gsub(/[^\?&=]+=(?:&|$)/, '') 

नोट: इस मई अंत में एक एम्पर्सेंड छोड़ दें, जिसे

url.chomp('&') 
2

मेरा समाधान रिक्त इनपुट और सेल को अक्षम करना था सीटीएस:

$('form').submit (e) -> 
    $(@).find('select,input').map((i, e) -> e.disabled = !$(e).val()) 

utf8 को दूर करने के बारे में मैं this पाया। तो मैं इसे बेहतर भेजना जारी रखता हूं।

सर्वर पर यह सब करने के परिणामस्वरूप redirect_to का उपयोग करते समय एक अतिरिक्त अनुरोध हुआ, इसलिए मैं क्लाइंट साइड कोड का उपयोग करना पसंद करता हूं।

1

अपने नियंत्रक विधि में, remove_empty_query_params

फिर फोन के लिए एक निजी पद्धति के रूप में:

def remove_empty_query_params 
    # Rewrites /projects?q=&status=failing to /projects?status=failing 
    require 'addressable/uri' 
    original = request.original_url 
    parsed = Addressable::URI.parse(original) 
    return unless parsed.query_values.present? 
    queries_with_values = parsed.query_values.reject { |_k, v| v.blank? } 
    if queries_with_values.blank? 
     parsed.omit!(:query) 
    else parsed.query_values = queries_with_values 
    end 
    redirect_to parsed.to_s unless parsed.to_s == original 
    end 
संबंधित मुद्दे