2012-07-31 23 views
9

अगर मैं निम्नलिखित सिनात्रा कोड है:मैं सिनात्रा के साथ अपने विचारों के लिए फ़ाइल एक्सटेंशन के रूप में .html.erb का उपयोग कैसे करूं?

get '/hi' do 
    erb :hello 
end 

यह अच्छा काम करता है अगर मैं एक फ़ाइल views/hello.erb कहा जाता है। हालांकि अगर मेरे पास views/hello.html.erb नामक एक फ़ाइल है, तो सिनात्रा फ़ाइल नहीं ढूंढ पाती है और मुझे एक त्रुटि देता है। मैं सिनात्रा को कैसे बता सकता हूं कि मैं इसे .html.erb को वैध .erb एक्सटेंशन के रूप में देखना चाहता हूं?

उत्तर

24

सिनात्रा Tilt का उपयोग करता है अपने टेम्पलेट्स प्रस्तुत करना, और उनके साथ एक्सटेंशन संबद्ध करने के लिए क्या करना चाहिए। अनुवर्ती सवाल का जवाब देने

Tilt.register Tilt::ERBTemplate, 'html.erb' 

get '/hi' do 
    erb :hello 
end 

संपादित: आपको बस इतना करना है झुकाएँ यह ERB का उपयोग करना चाहिए बता रहा है कि विस्तार से प्रस्तुत करना। #unregister नहीं है और यह भी ध्यान दें कि सिनात्रा hello.html.erb पर hello.erb पसंद करेंगे। वरीयता समस्या के रास्ते या तो erb विधि ओवरराइड या अपने खुद के प्रस्तुत करना विधि बनाने के लिए है:

Tilt.register Tilt::ERBTemplate, 'html.erb' 

def herb(template, options={}, locals={}) 
    render "html.erb", template, options, locals 
end 

get '/hi' do 
    herb :hello 
end 

कि hello.html.erb को प्राथमिकता देगी, लेकिन अभी भी hello.erb पर वापस गिर जाएगी अगर यह नहीं कर सकते hello.html.erb खोजें। यदि आप वास्तव में किसी भी परिस्थिति में .erb फ़ाइलों को ढूंढने से रोकना चाहते हैं, तो आप अनुमान लगा सकते हैं, ईआरबी टेम्पलेट को उपclass और इसके बजाय .html.erb के खिलाफ पंजीकरण करें, लेकिन स्पष्ट रूप से यह केवल इसके लायक नहीं है।

+0

धन्यवाद! महान काम करता है, और '.erb' भी काम करता है। ऐसा नहीं है कि मैं सम्मेलनों को मिश्रण करना चाहता हूं, लेकिन अभी भी जानना आसान है। क्या आप जानते हैं - अगर मैं अब और .html.erb को .erb को संभाल नहीं लेना चाहता था, तो क्या मैं .rb एक्सटेंशन को अक्षम करने के लिए'register' के अलावा कुछ और कह सकता हूं? – mattmc3

+1

आपका स्वागत है। मेरा संपादन देखें –

8

यह

get '/hi' do 
    erb :'hello.html' 
end 

या वैकल्पिक रूप से

get '/hi' do 
    erb 'hello.html'.to_sym 
end 
+0

+1। इसाक के जवाब के लिए एक उचित विकल्प, धन्यवाद। मैं हर एक मार्ग के लिए ऐसा करने के बजाय वैश्विक स्तर पर इस सम्मेलन को स्थापित करना चाहता हूं, इसलिए मैं उनके उत्तर के साथ गया। – mattmc3

+0

यह एक अच्छा सुझाव नहीं है कि कोई ईआरबी एक्सटेंशन नहीं है – kgpdeveloper