如何保存ruby builder生成的xml而不是在rails应用程序中呈现它?

时间:2010-12-22 12:11:06

标签: ruby-on-rails ruby xml builder

我有一个构建器,在调用create时呈现xml。如何跳过渲染步骤,但将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

2 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:0)

这太好了。您还可以创建一个路径来存储给定文件夹中的所有xml,以便组织应用程序。

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

谢谢Daniel