2011-04-04 7 views
12

मैंने रेलवे 2 में कई सहायकों के लिए इस पैटर्न का उपयोग किया है, लेकिन यह रेलों में समान काम नहीं कर रहा है। मेरा लक्ष्य है कि एक सहायक विधि कुछ एचटीएमएल टैग उत्पन्न करती है जिसमें सामग्री घोंसला होती है।रेलवे में एक ब्लॉक में एक सहायक विधि कैसे उत्पन्न होती है 3?

<div class="box"> 
    my content 
</div> 

रेल 2 में मैं इस तरह यह करना:

<% box_wrapper do %> 
    <%= yield -%> 
    <% end %> 
:

मेरी लेआउट फाइल के अंदर मैं सहायक विधि कॉल यहाँ मैं क्या पाने के लिए कोशिश कर रहा हूँ की एक बुनियादी उदाहरण है

सहायक विधि इस तरह परिभाषित किया गया है:

def box_wrapper 
    concat <<-EOF.html_safe 
    <div class="box"> 
    EOF 

    yield if block_given? 
    concat <<-EOF.html_safe 
    </div> 
    EOF 
end 

लेकिन रेल 3 में जब दृश्य प्रदान की गई हो जाता है कि यह मेरे पूरे पृष्ठ एक आउटपुट डी box_wrapper के अंदर यह दूसरी पृष्ठ सामग्री को दूसरी बार प्रस्तुत करता है।

मुझे लगता है कि मैं मददगार और उपज का उपयोग करने के तरीके के साथ कुछ स्पष्ट याद कर रहा हूं। कोई विचार?

उत्तर

31

रेल 3 में, अब आपको अपने ब्लॉक की सामग्री बनाने के लिए concat विधि का उपयोग करने की आवश्यकता नहीं है।

आपका सहायक अब इस तरह दिखता है:

def box_wrapper(&block) 
    content = capture(&block) 
    content_tag(:div, content, :class => 'box') 
end 

आप Railscasts 208 में अन्य उदाहरण देख सकते हैं।

+1

सिर्फ आर बेट्स की सिफारिश अग्रेषण: "अद्यतन: मैं उपयोग करने की अनुशंसा" "।।। यह ERB विचारों के बाहर काम करने के अतिरिक्त लाभ है कोड नीचे अद्यतन किया गया है" with_output_buffer "के बजाय विधि" पर कब्जा – apneadiving

+0

@apneadiving - इसके लिए धन्यवाद, निश्चित रूप से एक सुधार। –

+0

धन्यवाद! मेरा वास्तविक उपयोग एक सादा content_tag से अधिक जटिल है, लेकिन यह मुझे शुरू करने के लिए पर्याप्त था। – nimblegorilla

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