2010-12-22 52 views
7

我有一個構建器,當調用create時呈現xml。如何跳過渲染步驟,但將xml保存到文件系統?如何保存生成的Ruby的Ruby生成器,而不是在rails應用程序中呈現它?

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) – 2010-12-22 14:18:10

回答

26

XML構建器可以在其數據寫入到支撐<<操作者的任何對象。在你的情況下,StringFile物體似乎是最有趣的。

使用字符串將是這個樣子:

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

這太好了。您還可以創建一個路徑將所有xml存儲到給定文件夾中,以便組織應用程序。

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

謝謝丹尼爾

[使用Rails保存XML文件]的
+0

能不能請您告訴我這個原因 file = File.new(「xml/experiment.xml」,「w」) #爲xml創建構建器文件 xml = Builder :: XmlMarkup.new:target => file #xml標籤 xml.instruct! xml.EXPERIMENT_SET { xml.alias( 「#{@ experiment.alias}」) xml.center_name 「#{@experiment.center_name}」 } 我得到這樣 <?XML版本的輸出= 「1.0」encoding =「UTF-8」?> ZAP430 這不是一個整潔的XML,所有標記都顯示在一行中。 – A1aks 2012-02-03 11:15:08