Unauthorised unless request.format.xml?

Hi,

I’m using REST in my controller so therefore using respond to blocks
but I’d like to return an unauthorised header for certain methods
(create, update, delete) unless the request is for xml.

I don’t want any actions to be performed unless the request format is
xml.

So far I have tried:

POST /top_talkers

POST /top_talkers.xml

def create
head :status => :unauthorized unless request.format.xml?
############ <============
@top_talker = TopTalker.new(params[:top_talker])

respond_to do |format|
  if @top_talker.save
    format.xml  { render :xml => @top_talker, :status

=> :created, :location => @top_talker }
else
format.xml { render :xml => @top_talker.errors, :status
=> :unprocessable_entity }
end
end
end

but that just gives a double render error.

Thanks,
Toby

unless request.format.xml?
head :status => :unauthorized
render :nothing => true and return
end

Should work.
Vish

I’ve put that in a method called method_allowed? in application.rb and
set it as a before_filter for the methods I want to restrict access to
but when the before_filter is called I get a double render error. The
respond to block still appears to execute.

On Aug 9, 7:29 am, Toby C. [email protected] wrote:

Sorry that wasn’t very clear.

I wan’t to move the unless request.format… into a before_filter so I
don’t have to duplicate that unless…end in each method. How would I
do a ‘return’ for the entire request rather than just the current
method?

Make sure you also return false from your filter to abort further
processing.

Otherwise, your filter will run, and your action will run inducing
another render, which isn’t allowed.

Jeff

essentialrails.com - New to Rails? Get up to speed in 2 days. Sept
21-22, 2007 in Chicago.

Sorry that wasn’t very clear.

I wan’t to move the unless request.format… into a before_filter so I
don’t have to duplicate that unless…end in each method. How would I
do a ‘return’ for the entire request rather than just the current
method?

Thanks,
Toby