मैं ईआरबी का उपयोग कर टेम्पलेट फ़ाइल का पथ कैसे ढूंढूं? - रूबी, erb

I am using embedded ruby (ERB) to generating text फ़ाइलें। टेम्प्लेट फ़ाइल पथ के सापेक्ष किसी अन्य फ़ाइल का पता लगाने के लिए मुझे टेम्पलेट फ़ाइल की निर्देशिका को जानना होगा। क्या ईआरबी के भीतर एक सरल तरीका है जो मुझे वर्तमान टेम्पलेट फ़ाइल का फ़ाइल नाम और निर्देशिका देगा?

मैं कुछ इसी तरह की तलाश में हूं __FILE__, लेकिन (एरब) के बजाय टेम्प्लेट फ़ाइल दे रहा है।

उत्तर:

जवाब के लिए 8 № 1

जब आप रूबी से ईआरबी एपीआई का उपयोग करते हैं, तो आप एक स्ट्रिंग प्रदान करते हैं ERB.new, इसलिए ईआरबी के लिए वास्तव में कोई रास्ता नहीं है यह जानने के लिए कि वह फाइल कहां से आई है। हालाँकि आप ऑब्जेक्ट को बता सकते हैं कि यह किस फ़ाइल के उपयोग से आया है filename विशेषता:

t = ERB.new(File.read("my_template.erb")
t.filename = "my_template.erb"

अब आप इसका उपयोग कर सकते हैं __FILE__ में my_template.erb और यह फ़ाइल के नाम को संदर्भित करेगा। (यह वही है जो erb निष्पादन योग्य करता है, जिसके कारण है __FILE__ ERB फ़ाइलों में काम करता है जो आप कमांड लाइन से चलाते हैं)।

इसे थोड़ा और उपयोगी बनाने के लिए, आप एक फाइल से पढ़ने और सेट करने के लिए एक नई विधि के साथ ईआरबी को पैच कर सकते हैं filename:

require "erb"

class ERB
# these args are the args for ERB.new, which we pass through
# after reading the file into a string
def self.from_file(file, safe_level=nil, trim_mode=nil, eoutvar="_erbout")
t = new(File.read(file), safe_level, trim_mode, eoutvar)
t.filename = file
t
end
end

अब आप इस विधि का उपयोग ईआरबी फ़ाइलों को पढ़ने के लिए कर सकते हैं, और __FILE__ उन में काम करना चाहिए, और वास्तविक फ़ाइल को देखें और न केवल (erb):

t = ERB.from_file "my_template.erb"
puts t.result

संबंधित सवाल
सबसे लोकप्रिय