2011-02-17 30 views
23
url_for([:edit, @post]) 

काम कर रहा है और /comments/123/edit उत्पन्न कर रहा है। अब मैं एक क्वेरी पैरामीटर जोड़ने की जरूरत है, ताकि बजायurl_for के साथ क्वेरी पैरामीटर?

/comments/123/edit 

की यह

/comments/123/edit?qp=asdf 

है मैं url_for([:edit, @post], :qp => "asdf") लेकिन कोई जाने की कोशिश की।

उत्तर

26

नामित मार्गों का उपयोग करें।

edit_post_path(@post, :qp => "asdf") 
+0

मैं इस तरह एक पूर्ण पथ कैसे बना सकता हूं? – shredding

+3

'_path' के बजाय' _url' का उपयोग करें: 'edit_post_url (@post,: qp => "asdf") ' –

18

आप polymorphic_path

polymorphic_path([:edit, @post], :qp => 'asdf') 
7

उपयोग कर सकते हैं आप url_for करने के लिए params पारित कर सकते हैं। sourcecode में यह चेकआउट: https://github.com/rails/rails/blob/d891c19066bba3a614a27a92d55968174738e755/actionpack/lib/action_dispatch/routing/route_set.rb#L675

+0

यह एपीआई दस्तावेज़ों में स्पष्ट नहीं है। बहुत बहुत धन्यवाद, अधिक upvotes की जरूरत है। – Brad

1

रेल 4 में आप यह कर सकते हैं: url_for([[:edit, @post], :qp => "asdf"])

नोट अतिरिक्त सारणी वाक्य-विन्यास।

5

answer सिमोन Carletti वास्तव में काम करता है, लेकिन कई बार जब एक यूआरएल रेल मार्ग मार्गदर्शिका में बताए अनुसार वस्तुओं का उपयोग कर निर्माण करने के लिए, और _path सहायकों पर भरोसा नहीं करना चाहता है।

Ben और Swards दोनों के उत्तरों का वर्णन करने का प्रयास करने का प्रयास कर रहे हैं, लेकिन मेरे लिए सिंटैक्स का उपयोग एक त्रुटि में होता है (रेल 4.2.2 का उपयोग करके, जिसका 4.2.4 के समान व्यवहार होता है, जो कि है इस उत्तर के रूप में वर्तमान स्थिर रिलीज)।

वस्तुओं में से किसी URL/पथ बनाने के दौरान भी पैरामीटर प्रदान करने के होना चाहिए, के रूप में एक नेस्टेड सरणी, बल्कि एक फ्लैट सरणी URL में घटक युक्त, प्लस अंतिम तत्व के रूप में एक हैश का विरोध करने के लिए सही सिंटैक्स:

url_for([:edit, @post, my_parameter: "parameter_value"])

यहां पहले दो तत्व URL के घटकों के रूप में पार्स किए गए हैं, और हैश को यूआरएल के लिए पैरामीटर के रूप में माना जाता है।

यह भी link_to साथ काम करता है:

link_to("Link Text", [:edit, @post, my_parameter: "parameter_value"])

जब मैं url_for फोन के रूप में बेन & Swards ने सुझाव दिया:

url_for([[:edit, @post], my_parameter: "parameter_value"])

मैं निम्नलिखित त्रुटि मिलती है:

ActionView::Template::Error (undefined method 'to_model' for #<Array:0x007f5151f87240>)

निशान से पता चलता है कि इस से routing_url_for.rb (ActionView::RoutingUrlFor) ActionDispatch::Routing में polymorphic_routes.rb से बुलाया जा रहा है, url_for के माध्यम से:

gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:297:in `handle_list' 
gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:206:in `polymorphic_method' 
gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:134:in `polymorphic_path' 
gems/actionview-4.2.2/lib/action_view/routing_url_for.rb:99:in `url_for' 

समस्या जा रहा है, कि यह URL में घटक की एक सरणी (जैसे की उम्मीद कर रहा है। प्रतीकों, मॉडल वस्तुओं, आदि), एक सरणी जिसमें एक और सरणी है।

उचित coderouting_url_for.rb से को देखते हुए, हम देख सकते हैं कि जब यह एक सरणी जो अंतिम तत्व के रूप में एक हैश है, प्राप्त करता है यह तो extract हैश और पैरामीटर के रूप में व्यवहार करेगा, यूआरएल घटकों के साथ फिर बस सरणी छोड़ने ।

यही कारण है कि पिछले तत्व के रूप में हैश के साथ फ्लैट सरणी काम करता है, और नेस्टेड सरणी नहीं है।