# redirect_back vs redirect_to :back

Before Rails `4.x` to easily navigate back once the action is complete we used to use `redirect_to :back` method that looks something like this:

```ruby
class OrdersController < ApplicationController
  def approve
    order = Order.find params[:id]
    order.approve!

    redirect_to :back
  end
end
```

This action will approve the order and redirect the user to the previous location where he performed this action from. However, if this action was performed and the `HTTP_REFERER` is missing, which can lead to `ActionController::RedirectBackError` exception to be raised.

### Rescue the exception

One way to solve this method is to `rescue` the Exception and redirect to the default location.

```ruby
class OrdersController < ApplicationController
  rescue_from ActionController::RedirectBackError, with: :redirect_to_default


  def approve
    order = Order.find params[:id]
    order.approve!

    redirect_to :back
  end

  private

  def redirect_to_default
    redirect_to orders_path
  end
end
```

### Using `redirect_back`

After Rails 5.x, we can use [redirect\_back](https://apidock.com/rails/v5.0.0.1/ActionController/Redirecting/redirect_back) it accept `fallback_location` as an argument where we can provide the fallback location if the `HTTP_REFERER` is empty.

```ruby
class OrdersController < ApplicationController
  def approve
    order = Order.find params[:id]
    order.approve!

    redirect_back fallback_location: orders_path
  end
end
```
