Headers in ActiveResource

I am creating a rails app that is a gui wraping a restful web service
that uses a websso for authentication. This websso sets a series of
headers that I need to pass from the request to the
ActiveResource.find methods. As this is stuff like username etc it is
going to be different for each request. I can find examples on how to
set headers for all requests not just one.

Does anyone know of a way of doing this

Thanks in advance


Something at the Rack level, maybe?

"set" or do you actually mean "get" ?

If you need to *read* headers from a request you should do that in
your controller; unsurprisingly they're in a 'request.headers' array :slight_smile:


Ok it might be easier to show you type of thing I want to do.

class ActionsController < ApplicationController
  def index
    @actions = CorporateAction.all(:headers => request.headers)

  def show
    @action = CorporateAction.find(params[:id], :headers =>

Where CorporateAction is an ActiveResource ie

class CorporateAction < ActiveResource::Base
  self.site = "http://localhost:3000"
  self.format = :json

Is this possible or is there another way of doing it?


Is *what* possible? None of the above makes any sense to me -- can
you describe *exactly* your goal?

I am faced with the exact same scenario, an OAuth authentication is
accepted on a request and needs to be used on an ActiveResource lookup
call to a RESTful API, that itself requires the appropriate
authentication header to be set, possibly different for each HTTP
request. This seems to me to be a legitimate and possibly popular way
to use ActiveResource in the development community.

I don't have a workaround yet, I am hoping my post raises awareness.


Does active resource support setting headers on the model object
rather then on the model class?
That would solve the issue, but looking thought the active resource
code does not seem that it's available.

Any good reason why should the option of setting headers per object
not be supported/provided/available?


(Rails 3.0.3) ActiveResource::Connection lists

  get(path, headers = {})

as a public instance method; is that not what you want? ('headers' is
also part of other ReSTful verbs e.g. put/post/etc. method signatures)

So, how exactly do i set a unique headers for each individual request?

Here is the implementation from the ActiveResource code:

      def update
        connection.put(element_path(prefix_options), encode,
self.class.headers).tap do |response|

As you can see it does not respect the headers set on the object,
instead it always reads the headers from the class

Am I getting it wrong?


Looks like a discrepancy between the docs and reality :slight_smile:

I've never tried this before, but I don't see how to do it either. Sorry!