我已经开始在我的大多数模型中使用xml构建器模板。我需要找到一种在渲染之外构建XML的通用方法,该渲染使用.xml.builder模板而不是模型中提供的通用.to_xml方法
我认为我必须覆盖默认的to_xml(或添加to_my_xml),但我无法看到如何让XMLBuilder使用我的.builder文件。
有什么想法吗?
答案 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