2010-02-01 6 views
7

Ich habe angefangen, XML-Builder-Vorlagen für die meisten meines Modells zu verwenden. Ich muss eine generische Möglichkeit finden, XML außerhalb eines Renderings zu erstellen, das die .xml.builder-Vorlage anstelle der generischen .to_xml-Methode verwendet, die im Modell bereitgestellt wird. Ich nehme an, dass ich den Standardwert to_xml (oder fügen Sie eine to_my_xml) hinzu, aber ich kann nicht sehen, wie XMLBuilder meine .builder-Dateien verwendet.Wie erzeuge ich XML aus XMLBuilder mit einer .xml.builder Datei?

Irgendwelche Ideen?

Antwort

3

Fügen Sie in Ihrem Controller einen respond_to-Block hinzu, damit die entsprechende Vorlage entsprechend dem angeforderten Format gerendert wird. Zum Beispiel:

def show 
    ... 
    respond_to do |format| 
    format.html # renders show.html.erb 
    format.xml # renders show.xml.builder 
    end 
end 
+1

Danke für die schnelle Antwort. Ich habe bereits einen Antwortblock, aber ich muss den XML-Code kennen, der von dem Block "reply_to" erzeugt wird, bevor er ausgeführt wird, da ich diesen XML-Code als XMPP-Nachricht weiterleiten muss. Das Rendern im Block "respond_to" verwendet eine .xml.builder-Vorlage, die ich nachzuahmen versuche. – Barrie

1

Wenn Sie suchen, wie XML-Builder erstellen, dann ist dies, wie Sie es tun können

require 'rubygems' 
require 'builder' 
builder = Builder::XmlMarkup.new(:indent=>2) 
builder.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8" 
builder.my_elements do |e| 
    builder.myitem {|element| element.my_element_name('element_value')} 
end 

#=> 

<?xml version="1.0" encoding="UTF-8"?> 
<my_elements> 
    <myitem> 
    <my_element_name>element_value</my_element_name> 
    </myitem> 
</my_elements> 
+0

Hallo Naz - danke für das. Das Schlüsselproblem ist jedoch, dass ich die gleiche Vorlagendatei verwenden möchte, die Render verwendet, um das XML zu generieren. Also sieht mein repand_to Block wie folgt aus: respond_to tun | format | format.html format.xml {machen: template => "slides/slides_and_comments.xml.builder"} Ende Wie kann ich XmlBuilder die "Dias/slides_and_comments.xml.builder" Vorlage zu verwenden bekommen? – Barrie

1

Hallo, ich musste einfach dieses Problem lösen. Hier ist, wie ich es zur Arbeit gebracht habe, Kommentare inline ...

class PostsController < ApplicationController 
    # this must be included to use tag helpers like cdata_block, etc ... 
    include :Helpers::TagHelper 

    def preview_xml 
    @post = Post.find(params[:id]) 

    # You must set up a instance variable named 'xml' 
    xml = ::Builder::XmlMarkup.new(indent: 2) 

    builder_file = File.read(::Rails.root.to_s + '/app/views/posts/show.xml.builder') 

    require 'builder' 

    # instance_eval evaluates the file within the context of the current instance -- so the 
    # xml variable we just set will be accessable within the builder_file 
    instance_eval builder_file 

    @tag_xml = xml.target! 
    end 

end 
+0

möchten Sie vielleicht die 'require' über die :: Builder-Konstante setzen – Tails

Verwandte Themen