2010-11-17 27 views
6

मैं रेल के साथ काम कर रहे उन क्षणों में से एक के खिलाफ आ रहा हूं जब मुझे लगता है कि मेरे साथ समाप्त होने के मुकाबले बेहतर तरीका होना चाहिए।रूबी पर रूबी में अनुरोधों पर क्वेरीस्ट्रिंग मानों को मैं कैसे संरक्षित कर सकता हूं?

मेरे पास चार क्वेरीस्ट्रिंग पैरामीटर हैं जो मैं रेल ऐप के विभिन्न हिस्सों - विभिन्न नियंत्रकों और कार्यों के माध्यम से अनुरोधों को संरक्षित करना चाहता हूं, कुछ जावास्क्रिप्ट के माध्यम से प्रस्तुत किए जाते हैं - ताकि उपयोगकर्ता एक ही क्वेरीस्ट्रिंग पैरामीटर वाले यूआरएल पर समाप्त हो जाए के साथ शुरू किया

मैं इस पर विश्वास करना मुश्किल है कि सबसे अच्छा तरीका छिपा प्रपत्र फ़ील्ड्स के माध्यम से है खोजने रहा हूँ और मैन्युअल रूप से एक redirect_to के हिस्से के रूप में वापस पैरामीटर जोड़ने, या सत्र का उपयोग प्रत्येक के लिए वार्स - यह बस की तरह अन-रेल लगता है।

क्या किसी को इसका प्रबंधन करने के बेहतर तरीके से पता है?

धन्यवाद!

+0

उन्हें सत्र में क्यों नहीं रखा गया? क्या आप उनके बारे में कुछ और बात कर सकते हैं, और उन्हें सत्र में या डेटाबेस में क्यों डालना आपके लिए काम नहीं करता है? – PreciousBodilyFluids

+0

यह इतना नहीं है कि यह काम नहीं करता है, यह सिर्फ इतना है कि मुझे हैरान है कि कुछ रेल की भलाई नहीं है जो अनियंत्रित बनाती है। जहां तक ​​मैं कर रहा हूं, उसके बारे में विनिर्देशों के अनुसार, मैं एक jQuery ओवरले (एक रेल दृश्य द्वारा प्रस्तुत) में एक फॉर्म से एक आइटम सहेज रहा हूं, और सहेजने के बाद मैं चाहता हूं कि उपयोगकर्ता उसी पैरामीटर के आधार पर पृष्ठ को देखे जैसे ही उन्होंने इसे छोड़ा। पैराम तिथि और ऐप विशिष्ट दृश्य कॉन्फ़िगरेशन के लिए हैं। – evanmcd

उत्तर

5

इस तरह के मामलों में, मैं अक्सर पैरा के वर्तमान सेट के आधार पर यूआरएल बनाने के लिए एक सहायक कार्य का उपयोग करूंगा। दूसरे शब्दों में, मैं इसे परिभाषित करता हूं:

def merge_params(p={}) 
    params.merge(p).delete_if{|k,v| v.blank?} 
end 

और फिर अपने फॉर्म और लिंक के लिए यूआरएल बनाने के लिए url_for के साथ इसका उपयोग करें। आप को संशोधित करने और पैरामीटर के लिए की जरूरत है, बस उन्हें मर्ज में पारित:।

# url for the current page 
url_for(merge_params) 

# url for a different action 
url_for(merge_params(:controller => 'bar', :action => 'bar')) 

# et cetera 
url_for(merge_params(:action => 'pasta', :sauce => 'secret')) 

यह मौजूदा पैरामीटर की रक्षा करेंगे प्लस जो कुछ भी आप में विलय को ओवरराइड करता है

2

आप हमेशा बनाए रखने के लिए कुछ मापदंडों पर समन्वयित चाहते हैं प्रत्येक जेनरेट किए गए यूआरएल, आप अपने ऐप में default_url_parameters विधि को कार्यान्वित कर सकते हैं।

यह खराब प्रलेखित है, लेकिन mentioned in the Rails 18n Guide

अपने application_controller.rb में लागू:

def default_url_options(*args) 
    super.merge(
    :foo = params[:foo], 
    :bar = params[:bar] 
) 
end 

अब रेल द्वारा उत्पन्न हर यूआरएल foo और bar के लिए वर्तमान अनुरोध के मूल्यों में शामिल होंगे (जब तक कि एक यूआरएल है जेनरेट किया जा रहा है जो विशेष रूप से कुछ और होने के लिए निर्दिष्ट करता है)।

+0

यह काम नहीं करेगा .. कोड में एक बग है = होना चाहिए => और फिर भी यह काम नहीं करता है .. पथ नामों वाली रेल का उपयोग करते समय भी मेरे पास एक jquery कार्यक्षमता है जो कुछ पृष्ठों पर काम करती है लेकिन सभी नहीं। – whizcreed

-1

कृपया ध्यान दें कि यह रेल समाधान नहीं है लेकिन 80% मामलों में मेरे लिए काम करता है। इस तरह मैं इसे jQuery के साथ प्राप्त करने में सक्षम हूं, जाहिर है कि सबसे अच्छा तरीका नहीं है। और मैं यह लिंक के पिछले 2 स्तर काम करने के लिए असमर्थ हूँ:

function mergeGPS(){ 
    var lat = getParam('lat');//localStorage.getItem('lat'); 
    var lng = getParam('lng');//localStorage.getItem('lng'); 
    if(lat == null || lng == null){return false;} 
    var links = jQuery("a"); 
    jQuery.each(links, function(y, lnk){ 
     //debugger; 
    var uri = jQuery(lnk).attr('href') + "?lat="+lat+"&lng="+lng; 
    jQuery(lnk).attr('href',uri); 
    //debugger; 
    }) 
} 

function getParam(name) { 
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); 
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), 
     results = regex.exec(location.search); 
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

mergeGPS पृष्ठ लोड पर कॉल किया जाना चाहिए।

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