views:

32

answers:

1

Hi,

I am trying to use ActiveResource to consume xml data from a third party API. I can use the RESTClient app to successfully authenticate and make requests. I coded my app and when I make a request I get a 404 error. I added:

ActiveResource::Base.logger = Logger.new(STDERR) 

to my development.rb file and figured out the problem. The API responds with xml data to requests that do NOT end in xml. EG, this works in RESTClient:

https://api.example.com/contacts

but ActiveResource is sending this request instead

https://api.example.com/contacts.xml

Is there anyway "nice" way to strip the extension from the request being generated by ActiveResource?

Thanks

A: 

You probably need to override the element_path method in your model.

According to the API, the current defintion looks like this:

def element_path(id, prefix_options = {}, query_options = nil)
  prefix_options, query_options = split_options(prefix_options) if query_options.nil?  
  "#{prefix(prefix_options)}#{collection_name}/#{id}.#{format.extension}#{query_string(query_options)}"
end

Removing the .#{format.extension} part might do what you need.

Joe Mahoney
Yes, this does the trick. I found this article which goes into greater depth on working with ActiveResource and APIs. http://www.quarkruby.com/2008/3/11/consume-non-rails-style-rest-apis
Matt