ruby on rails - How to call a method and send new parameters in RoR? -


मान लें कि मेरे पास विधि ए

  def method ए नोट = नोट.फंड (params [: आईडी]] नोट.लिंक = पाराम [: लिंक] नोट.लिंक टाइप करें = पाराम [: लिंक प्रकार] नोट: पुनर्निर्देशित करें (नोट्स_उर्लि) समाप्ति  

जब मैं इस पद्धति को इस तरह से एक दृश्य से कॉल करता हूं , यह ठीक काम करता है

  & lt;% = link_to image_tag (w.link,: border = & gt; 0), methodA_path (: linktype = & gt; w.linktype,: link = & gt; w .link,: id = & gt; @ note.id)% & gt;  

लेकिन, अगर मैं विधि को किसी अन्य विधि से उसी नियंत्रक में कॉल करता हूं:

  def methodB ... methodA (: id = & gt; 

मुझे यह त्रुटि मिलती है:

  गलत तर्कों की संख्या (0 के लिए 1)  

विधि A को प्राप्त हो रही पैरामीटर अभी भी समान पैरामीटर हैं जो methodB को मिलते हैं, जिनके लिए मैं विधि B से नहीं भेज रहा हूं। मैं इस समस्या को कैसे प्राप्त करूं? पढ़ने के लिए धन्यवाद।

कई चीजें:

  • रुबी, और इसलिए रेल पर रूबी, नामकरण सम्मेलन को कैमेलकेस के बजाय अंडरस्कोर नोटेशन का उपयोग करना है। इसलिए यह method_a के बजाय methodA होना चाहिए।
  • ऐसा लगता है कि methodA एक नियंत्रक कार्रवाई है यदि आप अपने विधि हस्ताक्षर को देखते हैं, तो आप वास्तव में किसी भी विधि मापदंडों को परिभाषित नहीं कर रहे हैं। यह एक अच्छी बात है: कोई भी कार्य नहीं लेता है।
  • पैरामीटर कॉल में methodA कार्रवाई विधि मापदंडों तक नहीं पहुंच रही है, लेकिन यह एक्सेस है रेल अनुरोध
  • आपके विचार में, आप वास्तव में विधि बुला नहीं कह रहे हैं बल्कि, आप कार्रवाई के लिए लिंक कर रहे हैं, जो, जब क्लिक किया जाता है, तो उस कार्रवाई के लिए भेजा गया अनुरोध शुरू करें आप जिस वास्तविक विधि को बुला रहे हैं वह methodA_path है, जो यूआरएल उत्पन्न कर रहा है। यह एक शॉर्टकट है जो आपके लिए कुछ मापदंडों में स्वचालित रूप से भरता है (अन्य लोग हैं जो आप पास हैं)। यह विधि स्वचालित रूप से आपके मार्गों से आपके लिए उत्पन्न होती है थोड़ा और अधिक जानकारी के लिए अपने ऐप की जड़ से एक रेक मार्ग करें।
  • यदि आप methodB से एक्शन विधि कॉल करना चाहते हैं, जो है शायद मूर्ख, आपको इसे पैरामीटर पारित करने की आवश्यकता नहीं है चूंकि methodB भी एक अनुरोध है जिसे अपने स्वयं के अनुरोध चक्र में बुलाया जाता है, params हैश अभी भी methodA के लिए उपलब्ध है, और यह सभी को मिलेगा उन चीजों को सिर्फ ठीक। हालांकि, मैं किसी तीसरे सहायक पद्धति में किसी भी सामान्य कार्यक्षमता को निकालने और प्रत्येक क्रिया से कॉल करने का सुझाव देता हूं; अन्य क्रियाओं से कार्य करने की क्रिया मुझे एक कोड गंध की तरह महसूस करती है।

सारांश का एक छोटा: methodA और methodA_path भिन्न विधियां पूर्व कोई मापदंड नहीं लेता है लेकिन रेल अनुरोध मापदंडों हैश का उपयोग करता है, जबकि बाद में url_for

रेल 2 के लिए 3 संस्करण, रेल 3 के लिए 4)।


Comments