如何使用.xml.builder文件从XMLBuilder生成XML?

时间:2010-02-01 11:27:19

标签: ruby-on-rails xml ruby templates

我已经开始在我的大多数模型中使用xml构建器模板。我需要找到一种在渲染之外构建XML的通用方法,该渲染使用.xml.builder模板而不是模型中提供的通用.to_xml方法

我认为我必须覆盖默认的to_xml(或添加to_my_xml),但我无法看到如何让XMLBuilder使用我的.builder文件。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

在控制器中添加respond_to块,以便根据请求的格式呈现相应的模板。例如:

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

答案 1 :(得分:1)

如果您正在寻找如何使用构建器创建xml,那么这就是您可以这样做的方式

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>

答案 2 :(得分:1)

嗨,我只是要解决这个问题。以下是我如何使用它,内联评论......

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