11

से पैरामीटर पास करना मुझे एक नौसिखिया प्रश्न मिला। मैं अपने कंट्रोलर को अपने व्यू से एक वैरिएबल पास करने की कोशिश कर रहा हूं। क्या वैसे भी मेरे नियंत्रक में मेरी विधि मेरे दृश्य से चर प्राप्त कर सकती है?दृश्य से नियंत्रक

Post view: show.html.erb: 
.... 
<%=link_to "Add relationship", :method => :add_relationship(@rela) %> 

Controller: post.controller.rb: 

def add_relationship(rela) 
    @post = Post.find(params[:id]) 

    if current_user.id == @post.user_id 
    @post.rel_current_id = rela.id 
    @post.save 
    redirect_to relationships_url 
    else 
    redirect_to posts_url, :notice => "FY!" 
    end 
end 

अग्रिम धन्यवाद :)

+0

आप 'params' हैश इस्तेमाल कर सकते हैं ... – Jon

+0

यह वैरिएबल प्रकार निर्भर करता है। आप ऑब्जेक्ट्स को नियंत्रक को पास नहीं कर सकते हैं। आप एक छिपे हुए टैग – adcosta

+0

में इसे परिभाषित करने वाले सरल पैरा को पारित कर सकते हैं, मैं वास्तव में केवल उस पृष्ठ की वर्तमान आईडी में अपने मॉडल में एक आईडी बदलना चाहता हूं। मेरे पृष्ठ में एक आईडी है, इसलिए मैं उस मॉडल में पास करने की कोशिश कर रहा हूं। अगर मैं अपने पेज से पैरामीटर पास करना चाहता हूं और इसे अपने पोस्ट मॉडल (मेरे पोस्ट कंट्रोलर के साथ) में सहेजना चाहता हूं। मुझे यह कैसे करना है? कुछ "इस लिंक पर क्लिक करें" जैसे कुछ और आईडी को बदल देगा। <% = link_to "आईडी बदलें",: method => add_relationship, params [: rel_current_id = @ rela.id] – OXp1845

उत्तर

23

आप लिंक_to के माध्यम से पैरा हैश पर जानकारी जोड़ सकते हैं। मुझे यकीन है कि आप क्या करने की कोशिश कर रहे हैं कि वास्तव में क्या नहीं कर रहा हूँ लेकिन जब मैं

<%= link_to 'Send Thanks', new_invoice_email_path(@invoice, :type => "thanks") %> 

अब मेरी पैरामीटर नया ई-मेल से लिंक लग मैंने हाल ही में ईमेल मैं चाहता था के प्रकार जोड़ने के लिए कुछ इस तरह था जैसे:

{"type"=>"thanks", "action"=>"new", "controller"=>"emails", "invoice_id"=>"17"} 

मैं पैरामीटर

email_type = params[:type] 
एक स्ट्रिंग के बजाय

के माध्यम से प्रकार का उपयोग कर सकते हैं, अगर आप उदाहरण चर @rela में पारित आप पैरामीटर हैश में object_id मिल जाएगा।

नीचे टिप्पणी के अनुसार, मैं अपने मार्गों जोड़ रहा क्यों पथ new_invoice_email_path काम करता है दिखाने के लिए:

resources :invoices do 
    resources :emails 
end 
+0

हाँ, यह कुछ है जो मैं देख रहा हूं के लिये। क्या आपका नियंत्रक या विधि new_invoice_email_path है? पीएफटी, मुझे वास्तव में इसके बारे में अधिक जानने की जरूरत है। मैं रूबी की तुलना में जावा के लिए अधिक उपयोग किया जाता है ... – OXp1845

+0

यह मार्ग मुझे ईमेल नियंत्रक, नई कार्रवाई में ले जाता है। ईमेल चालान के लिए एक घोंसला वाला मार्ग है, मैं – Steve

+0

से ऊपर अपने उत्तर में अपने मार्ग जोड़ दूंगा, कमांड प्रॉम्प्ट खोलें और यह देखने के लिए 'रेक मार्ग' टाइप करें कि आपके पास निर्धारित मार्ग क्या हैं। यह आपको यह भी बताता है कि यह किस नियंत्रक और क्रिया को मानचित्र करता है। –

2

जब एक अनुरोध में आता है, नियंत्रक (और किसी भी मॉडल कॉल) पहले कार्रवाई की जाएगी और उसके बाद दृश्य कोड अंत में संसाधित किया जाता है। दृश्य मददगार में विधियों को कॉल कर सकता है, लेकिन नियंत्रक में फ़ंक्शंस को वापस संदर्भित नहीं कर सकता है।

हालांकि, एक बार पृष्ठ प्रस्तुत करने के बाद, आप किसी नए अनुरोध के हिस्से के रूप में या तो नियंत्रक को जानकारी वापस पोस्ट कर सकते हैं या नियंत्रक फ़ंक्शन को दूरस्थ रूप से कॉल करने के लिए AJAX/JQuery (आदि) का उपयोग कर सकते हैं।

क्या इससे मदद मिलती है?

+0

क्षमा करें, AJAX मेरे लिए जटिल है थोड़ा सा :) – OXp1845

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