2010-04-23 12 views
175

पर क्वेरीस्ट्रिंग पैरामीटर जोड़ें I linklto से urlHelper को क्वेरीस्ट्रिंग पैरामीटर को मुश्किल से जोड़ रहा है। मेरे पास एक इंडेक्स व्यू है, उदाहरण के लिए, जिसमें सॉर्टिंग, फ़िल्टरिंग और पेजिनेशन (will_paginate के माध्यम से) के लिए UI तत्व हैं। Will_paginate प्लगइन क्वेरीस्ट्रिंग पैरामीटर के इंट्रा-पेज दृढ़ता को सही तरीके से प्रबंधित करता है।link_to

क्या नाम देने वाले रूट पर क्वेरीस्ट्रिंग पैरामीटर जोड़ने के लिए कोई स्वचालित तंत्र है, या मुझे मैन्युअल रूप से ऐसा करने की आवश्यकता है? इस प्रतीत होता है कि इस सरल सरल निर्माण पर शोध का एक बड़ा सौदा मुझे अनजान छोड़ दिया है।

संपादित

चुनौतियों में से कुछ:

  1. अगर मैं दो क्वेरी स्ट्रिंग पैरामीटर है, बाल्टी & छंटाई, कैसे एक LINK_TO में इनमें से किसी एक के लिए एक विशिष्ट मूल्य, सेट करूँ जबकि संरक्षण दूसरे का वर्तमान मूल्य? उदाहरण के लिए:

    <%= link_to "0", profiles_path(:bucket => '0', :sorting=>??) %> 
    
  2. अगर मैं एकाधिक क्वेरी स्ट्रिंग पैरामीटर है, बाल्टी & & PAGE_SIZE सॉर्टिंग, और मैं इनमें से एक के लिए मूल्य निर्धारित करना चाहते हैं, वहाँ एक रास्ता करने के लिए 'स्वचालित रूप से के नाम और के मूल्यों में शामिल है शेष पैरामीटर? उदाहरण के लिए:

    <%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here]) %> 
    
  3. will_paginate प्लगइन स्वचालित रूप से अपने पेज चर और अन्य क्वेरी स्ट्रिंग चर प्रबंधन करता है। पेज आकार के प्रबंधन के लिए एक स्वचालित यूआई तत्व प्रतीत नहीं होता है। जबकि मैंने पेज आकारों की एक चुनिंदा सूची बनाने के लिए कोड देखा है, इसके बजाय मेरे पास इसके लिए एक तत्व होगा (जैसे SO)। इस चुनौती का हिस्सा # 2 से संबंधित है, भाग रिकॉर्ड के अस्तित्व/अस्तित्व के आधार पर इस यूआई तत्व को छिपाने/दिखाने से संबंधित है। एक और तरीके से कहा, यदि पृष्ठ पर रिकॉर्ड हैं तो मैं केवल पेज-आकार लिंक शामिल करना चाहता हूं। इसके अलावा, मैं link_to में नाम से उन्हें शामिल करने के बजाय अन्य QS चर (यानी पृष्ठ, बाल्टी, सॉर्टिंग) को स्वचालित रूप से शामिल करना पसंद करता हूं।

+0

संभव डुप्लिकेट रेल पैरामीटर हैश टी पारित करने के लिए ओ नामित मार्ग] (http://stackoverflow.com/questions/4559916/more- कुशल-way-to-pass-the-rails-params-hash-to-named-route) – random

+1

निकट से संबंधित: http: // stackoverflow .com/प्रश्न/2124862/लिंक-टू-प्रेष-पैरामीटर-साथ-साथ-यूआरएल-एंड-हड़पने-उन्हें-लक्ष्य-पृष्ठ –

उत्तर

283

API docs on link_to दोनों का नाम और ओल्डस्टएल मार्गों के लिए querystrings जोड़ने के कुछ उदाहरण दिखा। क्या ये वही है जो तुम चाहते हो?

link_to "Comment wall", profile_path(@profile, :anchor => "wall") 
#=> <a href="/profiles/1#wall">Comment wall</a> 

link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails" 
#=> <a href="/searches?query=ruby+on+rails">Ruby on Rails search</a> 

link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux") 
#=> <a href="/searches?foo=bar&amp;baz=quux">Nonsense search</a> 
+1

आपके उत्तर ने मुझे # 1: <% = link_to "0" हल करने में मदद की , profiles_path (: बाल्टी => '0',: सॉर्टिंग => पैराम्स [: सॉर्टिंग])%>। धन्यवाद। – craig

47

आप त्वरित और गंदी तरह से करना चाहते हैं और XSS हमले के बारे में चिंता मत करो, params.merge का उपयोग पिछले मापदंडों रखने के लिए हैं:

link_to भी एंकर या क्वेरी स्ट्रिंग के साथ लिंक कर सकते हैं। जैसे

<%= link_to 'Link', params.merge({:per_page => 20}) %> 

देखें: https://stackoverflow.com/a/4174493/445908

अन्यथा, इस जवाब की जाँच करें: params.merge and cross site scripting

+45

ऐसा न करें, यह आपको एक्सएसएस हमलों तक खुलता है। –

+0

@ डैनियल नील- क्या आप – Yarin

+3

@Yarin समझा सकते हैं [इस सवाल] पर एक बहुत अच्छी व्याख्या है (http://stackoverflow.com/questions/12271218/params-merge-and-cross-site-scripting)। – James

22

आप मौजूदा पैरामीटर रखने के लिए और नहीं XSS हमलों के लिए अपने आप को बेनकाब, पैरामीटर हैश साफ करने के लिए सुनिश्चित हो, केवल छोड़ने चाहते हैं पैरामीटर है कि आपका ऐप भेजने जा सकता है:

# inline 
<%= link_to 'Link', params.slice(:sort).merge(per_page: 20) %> 

 

आप को कई जगहों पर इसका इस्तेमाल करते हैं, नियंत्रक में पैरामीटर साफ हैं:

# your_controller.rb 
@params = params.slice(:sort, :per_page) 

# view 
<%= link_to 'Link', @params.merge(per_page: 20) %> 
3

मामले में आप एक ब्लॉक में पास करना चाहते हैं, कहते हैं, एक Glyphicon बटन के लिए, निम्न में के रूप में:

<%= link_to my_url, class: "stuff" do %> 
    <i class="glyphicon glyphicon-inbox></i> Nice glyph-button 
<% end %> 

तो गुजर querystrings पैरामीटर के माध्यम से पूरा किया जा सकता है:

<%= link_to url_for(params.merge(my_params: "value")), class: "stuff" do %> 
    <i class="glyphicon glyphicon-inbox></i> Nice glyph-button 
<% end %> 
[अधिक कुशल तरीका है