Ever wanted to add something to the xml representation of an ActiveRecord object that wasn’t a method or an include? You can with procs.
respond_to do |format|
format.xml do
proc = Proc.new { |options| options[:builder].tag!('saved', current_user.saved?(@page)) }
render :xml => @page.to_xml(:include => [:user], :procs => [proc])
end
end
And now this will spit out:
<?xml version="1.0" encoding="UTF-8"?>
<page>
<content>So here's line 1</content>
<created-at type="datetime">2009-10-15T16:50:57Z</created-at>
<dictionary-id type="integer">1</dictionary-id>
<saved>false</saved>
</page>
In this case, the model doesn’t know anything about the user and I wanted to keep it that way, but the XML api call needs to include the saved state.