2012-02-21 8 views
12

में पैरामीटर पास करें मैं रेल में link_to विधि के माध्यम से पैरामीटर पास करना चाहता हूं। मुझे पता है कि यूआरएल के माध्यम से ऐसा करने का एक तरीका है लेकिन मैं वास्तव में ऐसा नहीं करना चाहता हूं। लिंक पर इसे जोड़ने के बिना एक लिंक के माध्यम से एक param को पारित करने का कोई तरीका है?लिंक_to

मुझे PHP में पता है कि आप पोस्ट कर सकते हैं और फिर पोस्ट वैरिएबल का उपयोग कर उस मान को पुनर्प्राप्त कर सकते हैं। क्या रेल में कुछ समान है?

link_to(body, url_options = {}, html_options = {}) 

तो, पोस्ट की तरह लग रहे हैं (मान लीजिए कि आपने उपयोगकर्ता के डाटा पोस्ट करना चाहते हैं):

link_to "Link text", some_path(:foo => "bar", :baz => "quux"), user: @user, :method => :post 

उपयोगकर्ता की डेटा का उपयोग कर नियंत्रक में प्राप्त किए जा सकें

उत्तर

10

link_to हस्ताक्षर के रूप में निम्नानुसार लग रहा है params[:user]

3

किसी वेब अनुरोध के माध्यम से जानकारी पास करना URL द्वारा किया जा सकता है: http://example.com/foo?bar=blah एक जीईटी अनुरोध में क्या लिंक_to करता है, या एक पोस्ट ऑपरेशन के माध्यम से जो आम तौर पर एक फॉर्म की आवश्यकता होती है।

<form method="POST" action="http://example.com/foo"> 
    <input type="hidden" name="bar" value="blah"> 
    <input type="submit"> 
</form> 

विभिन्न रेल सहायकों मदद करने के लिए प्रपत्र का निर्माण यदि आवश्यक हो तो कर रहे हैं: अगर आप सिर्फ एक सबमिट बटन चाहते प्रपत्र छिपा तत्व हो सकता था।

आखिरकार, यदि आप वास्तव में एक लिंक चाहते हैं, तो आप या तो सीएसएस शैली उस बटन को देख सकते हैं, या आप एक लिंक देखने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं और फिर जानकारी पोस्ट कर सकते हैं। (विधि साइमन Bagreev पोस्ट जावास्क्रिप्ट के साथ यह करता है)

+0

धन्यवाद। मैं समझ नहीं पाया कि क्यों साइमन Bagreev समाधान काम करेगा। अब, मुझे सीएसएस या जावास्क्रिप्ट में स्पष्टीकरण की तलाश है। – Katarzyna

1

किस प्रकार का पैरामीटर? यदि यह एक जीईटी अनुरोध के लिए एक कुंजी है, तो सम्मेलन यूआरएल (उदाहरण के लिए पैरा [: आईडी] या एक सक्रिय रिकॉर्ड पथ चर का उपयोग करके निर्देशित करेगा)। अगर आप कुछ पोस्ट करना चाहते हैं, तो आपको एक फॉर्म का उपयोग करना चाहिए। अन्यथा, आप एक सत्र चर या कुछ सेट करने के लिए एक सहायक विधि लिख सकते हैं, लेकिन अपने आर्किटेक्चर के बारे में सोचें और अर्थात् करने का प्रयास कर रहे हैं, और मुझे यकीन है कि यहां कोई आपकी मदद कर सकता है।

+0

संक्षेप में यह एक जीईटी अनुरोध है, इसलिए मुझे शायद ऐसा नहीं करना चाहिए जो मैं करना चाहता हूं और केवल सम्मेलन का पालन करें। वर्तमान में, मेरे पास मेरे मार्ग बहुत घोंसला हैं - यूआरएल में पहले से ही 6 सेगमेंट का उपयोग कर रहे हैं। मैं कुछ और खंडों को रखने के लिए यूआरएल का उपयोग करने से बचने की कोशिश कर रहा था। – Kyle

5

यहां बताया गया है कि आप पारित पैरामीटर के साथ एक नई वस्तु बनाने के लिए, link_to विधि के माध्यम से पैरामीटर को कैसे पारित कर सकते हैं। अपने दृश्य दिखाने के लिए, आप एक चर @foo कहा जाता है कि आप अपने नया करने के लिए पारित करने के लिए करना चाहते हैं में

कहते हैं: इस रणनीति आप अपने नियंत्रक में कार्रवाइयों के साथ चर गुजरती हैं और पूर्व-निर्धारित विशेषताओं के साथ वस्तुओं को बनाने की अनुमति होगी नियंत्रक कार्रवाई। [: Foo], आप परम उपयोग करने की अनुमति: अपने नियंत्रक में [foo] जो मामले में, अपने शो ध्यान में रखते हुए, आप

<%= link_to "Link Text", new_widget_path(:foo => @foo) %> 

जो पैरामीटर में @foo संग्रहीत करेंगे हो सकता है। आपको नियंत्रित करने वाली कौन सी नियंत्रक कार्रवाई * new_widget_path * पर निर्भर करती है। इस मामले में, आपको विजेट नियंत्रक में नई कार्रवाई पर निर्देशित किया जाता है।

लिंक पाठ पर क्लिक करने से नई अपने WidgetController की कार्रवाई करने के लिए रेल निर्देशित करेंगे।आप अपने new.html.erb दृश्य फ़ाइल में

def new 
    @widget = Widget.new(:foo => params[:foo]) 
end 

फिर, हो सकता है, तो आप उपयोगकर्ता इस पूर्व निर्धारित foo विशेषता पहले से ही एक छिपा के माध्यम से भरा के साथ एक नया विजेट वस्तु बनाने के लिए अनुमति दे सकते हैं फॉर्म फील्ड:

<%= form_for(@widget) do |f| %> 
    <%= f.label :other_attribute %><br /> 
    <%= f.text_field :other_attribute %> 
    <%= f.hidden_field :foo %> 
    <%= f.submit %> 
<% end %> 

उपयोगकर्ता की अनुमति दे foo विशेषता पहले से भरी साथ एक नया विजेट बनाने के लिए!

+1

इस समाधान के बारे में आश्चर्यजनक बात यह है कि यह इतना विस्तृत और स्पष्ट रूप से समझाया गया है। पोस्ट करने के लिए बहुत बहुत धन्यवाद। एक साल बाद भी उपयोगी। – camdixon

+0

यह उदाहरण अभी भी नहीं दिखाता है कि नए पृष्ठ पर फ़ॉर्म बनने से पहले, लिंक_to पर क्लिक करने के बाद यूआरएल में पैरा को 'छुपाएं' कैसे करें। – Katarzyna

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