scaffold_resouce destroy

Hello group,

I ran across something while creating a client for my RESTful Rails
application. My client is written in Cocoa (just FYI).

The scaffold_resource generator writes the destory method like this:

  # DELETE /articles/1
  # DELETE /articles/1.xml
  def destroy
    @article = Article.find(params[:id])

    respond_to do |format|
      format.html { redirect_to articles_url }
      format.xml { head :ok }

During testing I realized that sending a request to delete an object
id that does not exist (or was deleted by another user or process)
results in a fairly ugly 500 - Internal Server Error and responds with
the standard Rails error page HTML even when requesting XML format.

I can detect the status 500 error and report this to the user,
however, I was wondering if there was a cleaner way to respond from
the controller. Also, would it be useful for the scaffold_resource
generator to be modified to check the result of @article =
Article.find(params[id]) before calling destroy, and respond with a
more appropriate status? Is there a more appropriate status code for
this operation?

Of course I could make the modifications myself for each controller,
but just wanted to get the opinions of other Rails programmers.


the reason it's blowing up *should* be because Article.find(params
[:id]) is raising a ActiveRecord::RecordNotFound

That exception will be returned as a 500 while in development mode.

If you're in production mode and hitting a non-local url (not 127.1)
then that exception should automatically be reported as a 404 - which
is exactly what you want.