Как сохранить сгенерированный ruby ​​Builder XML вместо рендеринга в приложении rails? - PullRequest
8 голосов
/ 22 декабря 2010

У меня есть конструктор, который отображает XML при вызове create.Как я могу пропустить шаг рендеринга, но сохранить 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 ]

27 голосов
/ 22 декабря 2010

Построитель XML может записывать свои данные в любой объект, поддерживающий оператор <<. В вашем случае 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

Подробнее см. В документации по XmlMarkup .

.
0 голосов
/ 03 февраля 2012

Это так хорошо.вы также можете создать путь для хранения всех xmls в заданной папке, чтобы приложение было организовано.

...