2011-09-22 22 views
10

में विशिष्ट स्थानों में विशिष्ट दृश्यों को बनाए रखना यदि मेरे पास <%= yield %> टैग है तो मेरे सभी विचार लेआउट में एक ही स्थान पर प्रस्तुत होते हैं। क्या अलग-अलग विचारों के लिए मेरे पास अलग-अलग <%= yield %> टैग हो सकते हैं? क्या मैं ऐसा कर सकता हूं? धन्यवादरेल पर रूबी: लेआउट

+0

क्या इससे कोई फर्क पड़ता है कि किस फ़ोल्डर में सामग्री के साथ दृश्य है? किस नियंत्रक के विचार से है? – holaSenor

उत्तर

22

ActionView::Helpers::CaptureHelper में देखो। आप अपने विचारों में कुछ इस तरह कर सकते हैं:

<% content_for :sidebar do %> 
    <!-- sidebar content specific to this page --> 
<% end %> 

यह content_for ब्लॉक के अंदर टेम्पलेट चलेगा, लेकिन उत्पादन नियमित टेम्पलेट yield बफर के हिस्से के रूप में, यह बाद में के लिए एक अलग बफर में संग्रहीत किया जाएगा नहीं होगा । फिर बाद में, लेआउट में शामिल है, तो आप yield :content_name उत्पादन के लिए सामग्री का उपयोग कर सकते हैं:

<div class="content"> 
    <%= yield %> 
</div> 

<div class="sidebar"> 
    <%= yield :sidebar %> 
</div> 

तो एक अर्थ में आप विभिन्न दृश्यों के लिए अलग yield रों हो सकता है, तो आप सिर्फ साथ भिन्न सामग्री एक नाम देने के लिए है विचारों में content_for, और लेआउट में उसी नाम के साथ उपज।

अपने मामले पर विचार करें, जहां आप विभिन्न स्थानों पर अलग-अलग विचार देखना चाहते हैं। मान लें कि आपके पास तीन पैनल, पैनल 1, पैनल 2 और पैनल 3 हैं। आप अपने लेआउट में ऐसा कर सकते हैं:

<div id="panel1"><%= yield :panel1 %></div> 
<div id="panel2"><%= yield :panel2 %></div> 
<div id="panel3"><%= yield :panel3 %></div> 

तुम भी एक सादे <%= yield %> शामिल करने के लिए यदि आप नहीं करना चाहते हैं की जरूरत नहीं है। फिर अपने विचारों में, आप चुन सकते हैं कि कौन सा पैनल पूरे दृश्य के आस-पास उचित content_for के साथ सामग्री प्रदर्शित करने के लिए चुन सकता है। उदाहरण के लिए, अपने विचारों में से एक इस तरह से बदला जा सकता है:

<% content_for :panel2 do %> 
    <!-- Your View --> 
<% end %> 

पैनल 2 में दिखाने के लिए एक और एक, पैनल 3 के लिए लक्षित किया जा सकता है इस तरह:

<% content_for :panel3 do %> 
    <!-- Your View --> 
<% end %> 
+0

यह पेज शीर्षक के लिए अच्छा है, जहां आप अधिकांश एगबर्ट पेज को कस्टमाइज़ करना चाहते हैं, लेकिन आप इसे प्रत्येक पृष्ठ में निर्दिष्ट करना चाहते हैं। यह केवल प्रमाणीकरण पृष्ठों पर छिपाने वाले साइडबार जैसे सामानों के लिए अच्छा नहीं बनाता है। – ahnbizcad

1

हां, आपके पास एकाधिक <%= yield %> टैग हो सकते हैं। आप मूल दृश्य में इन जैसे नामों के साथ प्रत्येक yield टैग निर्दिष्ट कर सकते हैं।

<%= yield :head %>

<%= yield :footer %>

फिर अपने अलग-अलग दृश्यों में content_for टैग का उपयोग करें।

<% content_for :head do %> 
    <%= stylesheet_link_tag 'custom' %> 
<% end %> 
0

आप उपज का उपयोग कर सकते हैं और सामग्री के लिए:

For example: 
<%= yield :head %> 
<% content_for :head do %> 
    <title>A simple page</title> 
<% end %> 
संबंधित मुद्दे