2009-11-20 15 views
13

मेरे पास "शो" नामक नियंत्रक के लिए एक दृश्य है। उस दृश्य के अंदर, मैं किसी अन्य नियंत्रक के दृश्य की सामग्री प्रस्तुत करना चाहता हूं - और जाहिर है, नियंत्रक से बात करने के लिए उस दृश्य के रूप में तर्क के लिए यह तर्क भी संबंधित है। मैं यह कैसे करु? मैं रेल के लिए बिल्कुल नया हूं और मैं अभी तक ढांचे के साथ 100% आत्मविश्वास नहीं हूं।रेल नियंत्रकों के दृश्य में एक नियंत्रक के दृश्य से आंशिक रूप से प्रस्तुत करना

आप लगभग उन्हें "विजेट" पर विचार कर सकते हैं। मैं जानता हूँ कि आप का उपयोग करके देखने पर एक ही नियंत्रक से कार्रवाई प्रदान कर सकते हैं:

render :action => "show_home_page", :layout=> false 

लेकिन मैं इसे एक और नियंत्रक से कार्रवाई (देखें) प्रस्तुत करने के लिए की जरूरत है।

यानी।

मेरे पास एक दृश्य है, जो एक लेआउट पर प्रस्तुत किया गया है। यही कारण है कि देखने के लिए, ए नियंत्रक के अंतर्गत आता है मैं "अनुक्रमणिका" और "नया" (ऊपर) मूल दृश्य के अंदर नियंत्रक बी से विचारों

रेंडर करने के लिए की जरूरत है।

+0

उद्धरण: "मैं रेल के लिए बिल्कुल नया हूं और मैं अभी तक ढांचे के साथ 100% आत्मविश्वास नहीं हूं।" - मैं रेलों के लिए नया नहीं हूं, लेकिन जब कभी मुझे लगता है कि मैं कुछ समझ गया हूं, तो मैं गलत हूं, वहां गलत है एक बेहतर समाधान या एक नया रेल संस्करण ;-) – halfbit

उत्तर

34

शब्दावली अपने सवाल थोड़ा उलझन में है। यदि नियंत्रक में हैं और आप किसी अन्य नियंत्रक में किसी अन्य क्रिया विधि में कोड निष्पादित करना चाहते हैं और इसके टेम्पलेट को प्रस्तुत करना चाहते हैं, तो आपको उस क्रिया को पुनर्निर्देशित करना चाहिए। मान लीजिए कि अन्य नियंत्रक ContractsController

redirect_to :controller => "contracts", :action => "show_home_page" 

कहा जाता है तो आप बस अपने कार्रवाई से प्रतिक्रिया के रूप में किसी अन्य विधि से देखने टेम्पलेट का उपयोग करना चाहते हैं तो करते हैं, तो आप सिर्फ पैरामीटर प्रस्तुत करना में नियंत्रक के नाम उपसर्ग की जरूरत है। यह कार्रवाई को कॉल नहीं करेगा, यह सिर्फ अपने टेम्पलेट का उपयोग करेगा।

उदाहरण के लिए, यदि टेम्पलेट अनुबंध नियंत्रक के लिए फ़ोल्डर में रहता है।

render :action => "/contracts/show_home_page", :layout=> false 

मैं इस मामले आप वास्तव में एक आंशिक के बारे में बात कर रहे हैं, जो

render :partial => "/contracts/show_home_page" 

हालांकि कैसा दिखेगा में लगता है, क्या मैं तुम्हें यहाँ पर लोभी देखते हैं कि आप वास्तव में एक से अधिक कॉल करना चाहते है एक पृष्ठ प्रस्तुत करने के लिए कार्रवाई विधियों। यह नहीं है कि यह कैसे काम करता है। आपको उन ऑब्जेक्ट्स को सेट अप करना होगा जिन्हें टेम्पलेट्स एक ही क्रिया में संदर्भित करेंगे। यह एक कारण है कि ज्यादातर रेल डेवलपर्स मॉडल में बहुत सारे कोड डालते हैं, इसलिए सेटअप को सभी नियंत्रकों पर दोहराया नहीं जाता है।

लेकिन वहाँ एक और तरीका है ... जहां जावास्क्रिप्ट के जादू में आता है

अपने पृष्ठ में, इस तरह एक समारोह बनाने के लिए:। यदि आप में है कि फोन

<script type="text/javascript" language="javascript">  
function load_categories() { 
      <%= remote_function(:url => {:controller => "categories", :action => "list"}, 
            :update => "categories")%> 
     }; 
</script> 

आपके पृष्ठ का भी अधिभार, यह संदर्भित कार्रवाई से प्रतिक्रिया के साथ आईडी "श्रेणियों" के साथ div को प्रतिस्थापित करेगा।

+1

इस तरह के एक अद्भुत आश्चर्यजनक जवाब। मैं थोड़ी देर के लिए इसे पचता हूं और आपसे वापस आ जाता हूं। आखिरकार मेरी आशा थी कि आंशिक रूप से "विजेट" का एक सेट तैयार किया जाए, जिसे मैं किसी भी दृश्य पर बस खींच सकता हूं। जावास्क्रिप्ट विधि कुछ ऐसा है जिसे मैंने नहीं माना था। – Ash

+0

दुर्भाग्यवश रिमोट_फंक्शन अब काम नहीं करता है क्योंकि प्रोटोटाइप सहायक को रेल में हटा दिया गया है 3.1 देखें कि हमें इस तरह के कामकाज की आवश्यकता है (http://stackoverflow.com/questions/13116243/error-undefined-method-remote-function-how-to बनाओ-ajax-कॉल-साथ-रेल-3-हमें) – msanjay

-1

मुझे यकीन है कि मैं आपकी समस्या को बयान पूरी तरह से समझ (क्यों इस दृश्य से किया जाना चाहिए) नहीं हूँ, लेकिन मैं कहेंगे तुम सिर्फ नियंत्रक एक से redirect_to फोन में बी

नियंत्रक को
+0

ठीक है, तो मेरे पास एक दृश्य है, जिसे एक लेआउट पर प्रस्तुत किया जाता है। यह दृश्य नियंत्रक ए से संबंधित है, मुझे उस पृष्ठ पर नियंत्रक बी से "अनुक्रमणिका" और "नए" दृश्य प्रस्तुत करने की आवश्यकता है। – Ash

0

तुम सच में पूरी तरह से एक और कार्रवाई प्रस्तुत करने के लिए (अर्थात रेल ढेर पर पूरे रूबी के माध्यम से जाने के लिए एक अनुरोध अनुकरण) चाहते हैं, आप Webrat (यहाँ Webrat screencast जाँच) का उपयोग कर सकते हैं।

पारंपरिक एमवीसी वेब अनुप्रयोगों में, आपको शायद ही कभी ऐसा करने की आवश्यकता होनी चाहिए। लेकिन मेरे अनुभव में सोफे-शैली और micro-architecture webapps विकसित करने में, यह अधिक से अधिक आम हो रहा है।

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