To reply to myself, don''t use the extension "xml.builder".
An
addition, the capybara API now uses page.driver.source instead of
page.driver.body to retrieve the XML response. ugh.
On Aug 26, 10:28 am, Chad Albers
<calb...-PHHwr1WFnZ18UrSeD/g0lQ@public.gmane.org>
wrote:> Hi,
>
> Yesterday, I upgraded from 3.0.3 to 3.0.10. I''ve encountered a
> problem with rendering XML. Here''s the situation.
>
> The app is primarily a non-RESTful API app. Controller actions should
> respond to requests with an XML response without the need to have
> an .xml at the end of the route request. For my controller actions I
> have written a builder (action_name.xml.builder) template and a
> builder layout (all_responses.xml.builder). For all the actions in
> the controller, I set the default layout to "all_responses" using
the
> controller layout class method.
>
> Under this scenario, Rails performed as expected in version 3.0.3.
> I could write the following and the correct XML with layout was
> produced.
>
> def action_name
> @animal = Animal.new
> render :content_type => "application/xml" and return
> end
>
> Rails would find the builder template under the controllers view
> directory as expected. It would work as well with the following:
>
> respond_to do |format|
> format.xml{render :status => 200}
> end
>
> After upgrading to rails 3.0.10. Rendering is no longer working as
> expected. Instead, I get the following error:
>
> Missing template action_name with
> {:locale=>[:eng, :eng], :formats=>[:html], :handlers=>[:rjs,
:rhtml, :erb, :rxml, :builder]}
> in view paths "/Users/me/src/app_name/app/
> views" (ActionView::MissingTemplate)
>
> In other words, Rails 3.0.10 no longer can find the template. It
> instead appears to always be searching for the html template which
> doesn''t exist.
>
> As a partial fix, I have to specify literally everything. For
> example....
>
> def action_name
> render :template => "controller_name/
> action_name.xml.builder", :status => 200, :layout =>
> ''all_response.xml.builder'' and return
> end
>
> But it only partially fixes the problem. If I go into the debugger,
> when I''m in this action, and I execute manually the render line
> above. I receive the correct XML response with the XML from the
> all_response.xml.builder layout. However, the actual response that
> Rails 3.0.10 delivers strips XML produced by the builder layout and
> actually wraps my action_name.xml.builder XML with a HTML doc type and
> the html tags such as html and body.
>
> In other words, despite the fact that I specify manually all the views
> and layout, it insists on producing HTML.
>
> I''m at a lose about what''s going on here. I search the
Rails change
> logs and couldn''t find anything that seems to affect the way
rendering
> works.
>
> If anyone could provide help or advice, I would greatly appreciate it.
>
> Chad
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.