I am converting a Rails 2 application to Rails 3. I currently have a controller set up like the following:
class Api::RegionsController < ApplicationController
respond_to :xml, :json
end
with and an action that looks like the following:
def index
@regions = Region.all
respond_with @regions
end
The implementation is pretty straightforward, api/regions, api/regions.xml and api/regions.json all respond as you would expect. The problem is that I want api/regions by default to respond via XML. I have consumers that expect an XML response and I would hate to have them change all their URLs to include .xml unless absolutely necessary.
In Rails 2 you would accomplish that by doing this:
respond_to do |format|
format.xml { render :xml => @region.to_xml }
format.json { render :json => @region.to_json }
end
But in Rails 3 I cannot find a way to default it to an XML response. Any ideas?
If I understand what you are trying to do, you probably can solve the issue by setting the default resource format to XML. This will allow your users to make requests using ‘api/regions’ and have the response default to XML. Take a look at look at the ‘Controller Namespaces and Routing’ and the ‘Defining Defaults’ sections at:
http://guides.rubyonrails.org/routing.html
You could do something like the following in routes.rb:
Then you should be able to have the following work for your controller methods: