2010-05-26 9 views
7

कुछ सवाल:सहायक मॉड्यूल में नियंत्रक विधियों को कॉल करने के लिए दिशानिर्देश?

  1. यह एक सहायक मॉड्यूल (जैसे, आवेदन सहायक) में एक नियंत्रक विधि कॉल करना संभव है?

  2. यदि हां, तो सहायक कैसे विचारों को प्रस्तुत करने में संभालता है? अनदेखी करो इसे?

  3. आप किस उदाहरण में एक सहायक से नियंत्रक विधि को कॉल करना चाहते हैं? क्या यह बुरा अभ्यास है?

  4. क्या आपके पास कोई नमूना कोड है जहां आप सहायक में विधियों के तरीके को कॉल कर रहे हैं?

उत्तर

10

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

हालांकि, दृश्यों में उपलब्ध नियंत्रक-विधियों को बनाने के लिए यह पूरी तरह से संभव है, उदाहरण के लिए current_user विधि है।

एक नियंत्रक विधि दृश्यों में उपलब्ध करने के लिए, एक सहायक विधि के रूप में, बस

private 

def current_user 
    # do something sensible here 
    @current_user ||= session[:user] 
end 
helper_method :current_user 

इस तरह की एक विधि सबसे अच्छा private खंड में परिभाषित किया गया है, या यह एक कार्रवाई के रूप में उपलब्ध हो सकता है कर (यदि आप आपके रूटिंग में एक वाइल्डकार्ड)।

0

एक सहायक से नियंत्रक को कॉल करना एमवीसी पैटर्न का उल्लंघन करता है। आईएमओ अगर आपको रेलवे हेल्पर से नियंत्रक को कॉल करने की आवश्यकता है (जैसे application_helper) तो उस डिज़ाइन के बारे में कुछ है जिसे बेहतर किया जा सकता है। इरादा यह है कि मददगार "मदद" विचार करते हैं, और इसलिए केवल मॉडल से बात करते हैं।

मैं यहां एमवीसी की रक्षा नहीं कर रहा हूं (वेब ​​पर संदर्भों का एक टन है), लेकिन नियंत्रक को एक दृश्य से कॉल करने के बारे में यह SO धागा आपको शुरू करना चाहिए।

Calling controller from view? (नोट, यह एक एएसपी.नेट धागा है, इसलिए केवल उच्च स्तर के सिद्धांत प्रासंगिक हैं)।

+0

आपके द्वारा लिंक किया गया थ्रेड ASP.NET के बारे में है तो यह बहुत मदद नहीं हो सकती है। –

+0

ओह.मैंने शपथ ली थी कि मैंने उन पंक्तियों के साथ अपेक्षाकृत हाल ही में रेल प्रश्न देखा है, लेकिन यह स्पष्ट रूप से नहीं है। मुझे लगता है कि बिंदु यह है कि दृश्य सहायक को वास्तव में दृश्य के हिस्से के रूप में देखा जाना चाहिए, और एमवीसी पैटर्न नियंत्रक को दृश्य से बुलाकर फहराता है। गुगलिंग रेल एमवीसी ओपी को छोड़ दिया गया एक अभ्यास है। – Greg

8

इसी नियंत्रक

private 
def method_name1 
... 
end 

def method_name2 
... 
end 

पर अपने तरीकों घोषित नियंत्रक के सिर में घोषित

helper_method :method_name1, :method_name2 

आप निजी राज्य

के तहत उन तरीकों की घोषणा करने के लिए कर सकते हैं और बस हो गया, अब आप एक सहायक पर अपनी विधि का उपयोग कर सकते हैं

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