I currently have a login popup in my header bar which is on every page in my website. I want to be able to reload the current page that the person is on after a successful
If you're looking for a way to get the page to refresh (typically redirect_to :back
) with an XHR request, you don't have to look for a way to change the response type - just tell the page to reload with inline JS.
format.js {render inline: "location.reload();" }
Like Elena mentions, this should go in a respond_to block, like so:
respond_to do |format|
format.js {render inline: "location.reload();" }
end
Since Rails 5 (or maybe older versions), you have a request.referrer
method. You simply redirect from controller to referrer and it opens the page where request came from.
redirect_to request.referrer, notice: "You're being redirected"
This syntax is what you want... works in Rails 6
respond_to do |format|
format.html { redirect_to request.referrer, notice: "User was successfully WHATEVER." }
end
In Rails 5 redirect_to :back
is improved by:
redirect_back(fallback_location: root_path)
Rails 5 introduced alternative function:
redirect_back(fallback_location: root_path)
It redirect back whenever the HTTP_REFERER is known. Otherwise it redirects to the fallback_location.
The redirect_to :back
is deprecated in Rails 5.0 https://github.com/rails/rails/pull/22506 and removed since Rails 5.1
For my application, I use redirect_to :back
and it does the trick. However, I doubt this might have an error in a non general use case(s) (user came from a special page?) but i haven't found it so far in my app.