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 <[email protected]> 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 [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

