2010-03-17 13 views
12

मैं उपज का उपयोग ईआरबी में टेम्पलेट विरासत के लिए कैसे कर सकता हूं? मैं एक सादे रूबी सीजीआई स्क्रिप्ट में एआरबी का उपयोग करना चाहता हूं और एप्लिकेशन टेम्प्लेट के साथ रेल की तरह एक बेस टेम्पलेट और उप-टेम्पलेट का उपयोग करना चाहता हूं।रेल के बिना ईआरबी में उपज

उत्तर

3

मुझे नहीं लगता कि आप कर सकते हैं - रेल एक्शनपैक के हिस्से के रूप में उस आधारभूत संरचना प्रदान करता है।

आप क्या करने में सक्षम हो सकते हैं एक्शनपैक लेना और इसे अपनी स्क्रिप्ट में जोड़ें।

वैकल्पिक रूप से आप एक हल्के टेम्पलेटिंग सिस्टम को स्वयं रोल कर सकते हैं।

वैकल्पिक रूप से वैकल्पिक रूप से रेल या मेरब या सिनात्रा का उपयोग करें।

+0

डाउन-वोट के बावजूद, लेआउट और टेम्पलेट विरासत रेल का हिस्सा है, न कि ईआरबी स्वयं। –

35
def a 
    ERB.new('<%= yield %>').result(binding) 
end 
a{123} 
#=> "123" 

यह महत्वपूर्ण है कि Kernel#binding करने के लिए कॉल के लिए एक विधि के अंदर होना है, कि जिस तरह से संदर्भ ब्लॉक भी शामिल है (ERB#result एक ब्लॉक नहीं ले जाएगा)।

+0

मैं इसे काम करने में सक्षम नहीं था। ईआरबी कैसे जानता है कि इसे उपज में प्रस्तुत करना चाहिए? –

5

झुकाव देखें (http://github.com/rtomayko/tilt/)। यह मणि है जो सिनात्रा में टेम्पलेटिंग को संभालता है और यह कई अन्य अच्छी सुविधाओं के साथ ईआरबी उपज प्रदान करता है।

3

आप झुकाव का उपयोग कर सकते, लेकिन अगर आप एक अतिरिक्त निर्भरता को जोड़ने के लिए नहीं करना चाहते हैं, आपके द्वारा ERB में प्राप्त हो सकते हैं पर एक बेहतर उदाहरण है:

require "erb" 

class Controller 
    TEMPLATE = ERB.new("Hello <%= @someone %>\n\n<%= yield %>") 

    def initialize(someone) 
    @someone = someone 
    end 

    def render 
    TEMPLATE.result(self.get_binding { yield }) 
    end 

    def get_binding 
    binding 
    end 
end 

puts Controller.new("World").render { "I'm Jack" } 
# => 
Hello World 

I'm Jack 

मैं जवाब here पाया।

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