2011-01-31 10 views
18

yield ब्लॉक को कॉल करने के लिए उपयोग किया जाता है। रेल में यह कैसे काम करता है जहां yield लेआउट के लिए उपयोग किया जाता है?रेल पर रूबी लेआउट के लिए उपज का उपयोग कैसे करती है?

-# application.html.haml 
%body= yield 

इसे कहीं ब्लॉकों का उपयोग करता है या विधि बस ओवरराइड की गई है?

उत्तर

18

तकनीकी रूप से, yield इस संदर्भ में एक ब्लॉक भी बुला रहा है। हालांकि, ब्लॉक दृश्य है कि आपके नियंत्रक कार्रवाई को प्रस्तुत करने के लिए कहा गया था।

उदाहरण के लिए, मान लें कि आपके पास StaticContentController है जिसमें index है जो आपके होम पेज का प्रतिनिधित्व करता है। सही तरीके से कॉन्फ़िगर किए गए मार्गों के साथ, आप अपने होम पेज पर जाते हैं। रेल views/layouts में लेआउट फ़ाइल लोड करेंगे जो उस नियंत्रक (application.html.haml के लिए उपयुक्त है, जब तक कि आप इसे अपने नियंत्रक के लिए लेआउट के साथ ओवरराइड न करें)। जब यह yield कमांड तक पहुंचता है, तो यह उस स्थान पर views/static_content/index.html.haml पर दृश्य डालता है जहां yield आपके लेआउट के अंदर है। फिर, यह आपकी शेष लेआउट फ़ाइल लोड करता है।

 
def twice 
    yield 
    yield 
end 

> twice { print 'hi ' } 
=> hi hi 

एक लेआउट के बारे में सोच का सबसे अच्छा तरीका एक विधि है कि एक ब्लॉक के साथ कहा जाता है:

8

डिफ़ॉल्ट रूप से सभी रूबी कार्यों एक ब्लॉक पारित किया जा सकता।

जब रेल टेम्पलेट प्रस्तुत करता है, तो यह वास्तव में लेआउट # प्रस्तुत करने के लिए कॉल कर रहा है। लेआउट # रेंडर एक डिफ़ॉल्ट ब्लॉक स्वीकार करता है। डिफ़ॉल्ट रूप से रेल इस दृश्य के रूप में आपके विचार को पास करता है। इसका मतलब है कि आपके लेआउट के भीतर से उपज को कॉल करना डिफ़ॉल्ट ब्लॉक को कॉल करना है, जो इस मामले में आपका विचार है।

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