Querystring पैरामीटर को link_to में जोड़ें


214

मैं मुश्किल से जोड़ने के मापदंडों को जोड़ने के लिए रहा हूँ UrlHelper। मेरे पास एक अनुक्रमणिका दृश्य है, उदाहरण के लिए, जिसमें यूआई तत्व छँटाई, छानने और पेगिनेशन (will_paginate के माध्यम से) हैं। Will_paginate plugin सही तरीके से querystring पैरामीटर के इंट्रा-पेज दृढ़ता का प्रबंधन करता है।

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

संपादित करें

कुछ चुनौतियाँ:

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

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

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



1
निकटता से संबंधित: stackoverflow.com/questions/2124862/…
Ciro Santilli 郝海东 flow flow flow 病

जवाबों:


341

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

link_to एंकर या क्वेरी स्ट्रिंग्स के साथ लिंक भी उत्पन्न कर सकते हैं:

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

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

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

1
आपके उत्तर ने मुझे # 1: <% = link_to "0", प्रोफाइल_पैथ (: बाल्टी => '0',: छँटाई => परास [: छँटाई])>> को हल करने में मदद की। धन्यवाद।
क्रेग

यह सही है। नया सिंटैक्स `<% = link_to" क्रिएट नोट ", new_note_path (प्रेषक_आईडी: @ user.id)%>`
gsumk

51

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

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

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

अन्यथा, इस उत्तर की जांच करें: params.merge और क्रॉस साइट स्क्रिप्टिंग


56
ऐसा न करें, यह आपको xss हमलों तक खोलता है।
डैनियल नाइल

1
@ DanielNill- कर सकते हैं समझाने
Yarin

3
@ यारिन इस सवाल पर बहुत अच्छी व्याख्या है ।
जेम्स

5
@ यारिन मनमाने ढंग से उस पेज में प्रिंटिंग पैरामीटर जो उपयोगकर्ता द्वारा प्रस्तुत किए गए हैं (और जरूरी नहीं कि साफ किया गया हो) किसी को आपकी साइट से लिंक करने की अनुमति देता है जो जावास्क्रिप्ट को एन्कोड करता है। उस जावास्क्रिप्ट को तब पृष्ठ में मुद्रित किया जाता है और क्रियान्वित किया जाता है, संभावित रूप से कुकीज़ चुराने या नापाक कार्य करने के लिए। रेल आम तौर पर पृष्ठ में छपे हुए सामान की सफाई में बहुत अच्छा होता है, लेकिन यह खेद से सुरक्षित होना बेहतर है
पीटर निक्से

24

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

# 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) %>

4

यदि आप एक ब्लॉक में कहना चाहते हैं, तो ग्लिफ़िकॉन बटन के लिए, जैसा कि निम्नलिखित में है:

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

फिर उत्तीर्ण उत्तोलकों के माध्यम से पूरा किया जा सकता है:

<%= link_to url_for(params.merge(my_params: "value")), class: "stuff" do %>
  <i class="glyphicon glyphicon-inbox></i> Nice glyph-button
<% end %>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.