Как сгенерировать XML из XMLBuilder с помощью файла .xml.builder? - PullRequest
7 голосов
/ 01 февраля 2010

Я начал использовать шаблоны xml builder для большей части моей модели. Мне нужно найти общий способ построения XML вне рендера, который использует шаблон .xml.builder вместо общего метода .to_xml, предоставленного в модели

Я понимаю, что мне придется переопределить стандартную to_xml (или добавить to_my_xml), но я не могу понять, как заставить XMLBuilder использовать мои файлы .builder.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 01 февраля 2010

Добавьте блок respond_to в свой контроллер, чтобы соответствующий шаблон отображался в соответствии с запрошенным форматом. Например:

def show
  ...
  respond_to do |format|
    format.html # renders show.html.erb
    format.xml  # renders show.xml.builder
  end
end
1 голос
/ 12 мая 2011

Привет, мне просто нужно было решить эту проблему. Вот как я получил его на работу, встроенные комментарии ...

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
1 голос
/ 01 февраля 2010

Если вы ищете, как создать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...