Using partials with XML builder, what's the right way?

Hello everyone,

Partials in XML builder are proving to be non-trivial.

After some initial Google searching, I found the following to work,
although it's not 100%

     xml.foo do
         xml.id(foo.id)
         xml.created_at(foo.created_at)
         xml.last_updated(foo.updated_at)
         foo.bars.each do |bar|
             xml << render(:partial => 'bar/_bar', :locals => { :bar
=> bar })
         end
     end

this will do the trick, except the XML output is not properly
indented. the output looks something similar to:

    <foo>
      <id>1</id>
      <created_at>sometime</created_at>
      <last_updated>sometime</last_updated>
    <bar>
      ...
    </bar>
    <bar>
      ...
    </bar>
    </foo>

The ``<bar>`` element should align underneath the ``<last_updated>``
element, it is a child of ``<foo>`` like this:

    <foo>
      <id>1</id>
      <created_at>sometime</created_at>
      <last_updated>sometime</last_updated>
      <bar>
        ...
      </bar>
      <bar>
        ...
      </bar>
    </foo>

Works great if I copy the content from bar/_bar.xml.builder into the
template, but then things just aren't DRY.

Thanks,

Matthew

Matthew Hillsborough wrote:

Hello everyone,

Partials in XML builder are proving to be non-trivial.

So use Haml instead of Builder -- it works just as well for XML as for
HTML. Problem solved.

IMHO, Builder is the single most pointless thing in the Rails ecosystem.

Best,

I've swapped-in Nokogiri rather than builder, but my general strategy
is the same; using helper methods to encapsulate discreet xml building
code for reuse rather than partials. Seems less hackish. Just pass
in the xml object you are building up.