2010-12-22 16 views
7

Oluşturduğumda xml oluşturan bir oluşturucum var. Oluşturma adımını nasıl atlayabilirim, ancak xml dosyasını dosya sistemine kaydedebilir miyim?Rubi oluşturucu, ray uygulamasında görüntülemek yerine oluşturulan xml'yi nasıl kaydeder?

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

olası yinelenen (http://stackoverflow.com/questions/4163385/saving-xml-files-with-rails) –

cevap

26

XML oluşturucu << operatör destekleyen herhangi bir nesneye veri yazabilir. Sizin durumunuzda String ve File nesneler en ilginç görünmektedir.

böyle bir şey olmazdı bir dize kullanarak:

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

için:

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 

Ama File sınıf yanı << operatörü destekler beri, doğrudan bir dosyaya veri yazabilir

Daha fazla detay the documentation of XmlMarkup'a bir göz atmaktadır.

0

Bu çok güzel. Ayrıca, uygulamanın düzenlenmesi için belirli bir klasördeki tüm xmls'leri depolamak için bir yol da oluşturabilirsiniz.

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

[Rails ile Tasarruf XML dosyalarının] arasında
+0

yapabildin Lütfen size Daniel ederiz # xml için oluşturucu dosyası oluşturma ("w", "xml/experiment.xml") bana bu dosyası = File.new nedenini anlatmak xml = Oluşturucu :: XmlMarkup.new: target => dosyası # xml etiketleri xml.instruct! xml.EXPERIMENT_SET { xml.alias ("# {@ experiment.alias}") xml.center_name "#{@experiment.center_name}" Bu ZAP430 Bu düzgün bir XML değil, tüm etiketler tek bir satırda görüntülenir. – A1aks

+0

Kullanarak xml = Builder :: XmlMarkup.new (: target => dosya,: indent => 2) 'güzel bir XML almak için. Oluşturucu oluştururken ': indent => 2'. – Kush