I'm creating an API in Rails and I've run into a situation where I'd like to alert the user that something bad happened by passing them some JSON with an error message. However, I'd also like to re-raise the exception so that Airbrake (formerly Hoptoad) will still catch the error and notify us so that we can look into the problem a bit more.

I'm currently catching the error like so:

```
begin
  if @myobject.update_attributes(:foo => "bar")
    render :json => @myobject, :status => :ok
  else
    render :json => @myobject.errors, :status => :unprocessable_entity
  end
rescue Exception => e
  render :json => { :errors => { :message => "Uh oh! Something went wrong." } }
  raise e
end

```

The problem is that my client never gets the JSON message since the `raise e` stops it from rendering and sends it a generic 500 error.

How should I fix this?

**[My Solution]**

As suggested by Jordan below, I simply call `notify_airbrake(ex)` in my code any time that I catch the exception. However, I abstracted it slightly by adding the following to my `ApplicationController` so that I can easily change from Airbrake to something else in the future:

```
class ApplicationController < ActionController::Base
  ...

  def notify_exception_service(ex)
    notify_airbrake(ex)
  end

  ...
end

```

So, instead of `notify_airbrake(ex)` I just call `notify_exception_service(ex)`.