2010-12-22 5 views
7

मेरे पास एक निर्माता है जो बनाते समय एक्सएमएल प्रस्तुत करता है। मैं प्रतिपादन चरण को कैसे छोड़ सकता हूं, लेकिन xml को फाइल सिस्टम में सहेज सकता हूं?रेल अनुप्रयोग में रेंडर करने के बजाय रूबी बिल्डर जेनरेट एक्सएमएल कैसे बचाएं?

def create 
    @server = Server.new(params[:server]) 

    respond_to do |format| 
     if @server.save 
      flash[:notice] = "Successfully created server." 
      format.xml 
     else 
      render :action => 'new' 
     end 
    end 
end 
+0

संभव डुप्लिकेट (http://stackoverflow.com/questions/4163385/saving-xml-files-with-rails) –

उत्तर

26

एक्सएमएल बिल्डर किसी भी << ऑपरेटर समर्थन वस्तु को अपने डेटा लिख ​​सकते हैं। आपके मामले में String और File ऑब्जेक्ट्स सबसे दिलचस्प लगते हैं।

एक स्ट्रिंग का उपयोग करते हुए कुछ इस तरह दिखेगा:

xml = Builder::XmlMarkup.new # Uses the default string target 
# TODO: Add your tags 
xml_data = xml.target! # Returns the implictly created string target object 

file = File.new("my_xml_data_file.xml", "wb") 
file.write(xml_data) 
file.close 

लेकिन File वर्ग के रूप में अच्छी तरह से << ऑपरेटर का समर्थन करता है के बाद से, आप सीधे एक फ़ाइल में डेटा लिख ​​सकते हैं:

file = File.new("my_xml_data_file.xml", "wb") 
xml = Builder::XmlMarkup.new target: file 
# TODO: Add your tags 
file.close 

के लिए अधिक जानकारी the documentation of XmlMarkup पर एक नज़र डालें।

0

यह बहुत अच्छा है। आप किसी दिए गए फ़ोल्डर में सभी एक्सएमएल को स्टोर करने के लिए पथ भी बना सकते हैं ताकि एप्लिकेशन व्यवस्थित हो।

file = File.new("some_path/my_xml_data_file.xml", "w") 

धन्यवाद डैनियल

[रेल के साथ सहेजा जा रहा है एक्सएमएल फाइल] की
+0

कृपया आप कर सकते थे मुझे इस फ़ाइल = File.new ("xml/experiment.xml", "w") # xml xml = बिल्डर :: XmlMarkup.new: target => फ़ाइल के लिए बिल्डर फ़ाइल बनाना # एक्सएमएल टैग xml.instruct! xml.EXPERIMENT_SET { xml.alias ("# {@ experiment.alias}") xml.center_name "#{@experiment.center_name}" } मैं इस ZAP430 जो एक साफ एक्सएमएल नहीं है, सभी टैग एक ही पंक्ति में प्रदर्शित होते हैं। – A1aks

+0

एक सुंदर एक्सएमएल प्राप्त करने के लिए 'xml = बिल्डर :: XmlMarkup.new (: target => फ़ाइल,: indent => 2) 'का उपयोग करें। नोटिस ': इंडेंट => 2' बिल्डर बनाने के दौरान। – Kush

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