February 29, 2016
This blog is part of our Rails 5 series.
In Rails 4.x, for going back to previous page we use redirect_to :back.
However sometimes we get ActionController::RedirectBackError exception when
HTTP_REFERER is not present.
class PostsController < ApplicationController
def publish
post = Post.find params[:id]
post.publish!
redirect_to :back
end
end
This works well when HTTP_REFERER is present and it redirects to previous
page.
Issue comes up when HTTP_REFERER is not present and which in turn throws
exception.
To avoid this exception we can use rescue and redirect to root url.
class PostsController < ApplicationController
rescue_from ActionController::RedirectBackError, with: :redirect_to_default
def publish
post = Post.find params[:id]
post.publish!
redirect_to :back
end
private
def redirect_to_default
redirect_to root_path
end
end
In Rails 5, redirect_to :back has been deprecated and instead
a new method has been added called
redirect_back.
To deal with the situation when HTTP_REFERER is not present, it takes required
option fallback_location.
class PostsController < ApplicationController
def publish
post = Post.find params[:id]
post.publish!
redirect_back(fallback_location: root_path)
end
end
This redirects to HTTP_REFERER when it is present and when HTTP_REFERER is
not present then redirects to whatever is passed as fallback_location.
If this blog was helpful, check out our full blog archive.