2010-12-22 50 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