How do I redirect back to a page I'm currently on?
Solution 1
redirect_to :back
worked for me but I want to see if this was the right choice
http://api.rubyonrails.org/files/actionpack/lib/action_controller/metal/redirecting_rb.html
Solution 2
In Rails 5 it was introduced the function:
redirect_back(fallback_location: root_path)
It does redirect back whenever the HTTP_REFERER
is known. Otherwise it redirects to the fallback_location
.
The redirect_to :back
is deprecated and will be removed from Rails 5.1.
Solution 3
In one project we used the session for temporary storage, because redirect_to :back
did not work for us.
We had an def new
where we set session[:return_to] = request.referer
in the def create
we added redirect_to session[:return_to]
.
I do not know anymore, why we could not use redirect_to :back
Comments
-
LondonGuy almost 4 years
In my users photo album page they see photos they have uploaded and each photo has a 'make default' link on it. When the user clicks
make default
, then the id of the photo is stored in thephoto_id
column of my profiles table.The issue is redirecting them back to:
localhost:3000/settings/photo_gallery/:id
Is there a way I can redirect back to the photo album using the id of the photo that has just been set as the default? Can Rails find what album I want to redirect to just by looking at the id of a photo, as a photo belongs to a photo album, and a photo album has many photos?
I have the following tables in my database:
- User(s): has one profile, has many PhotoAlbums
- Profile(s): belongs to user
- PhotoAlbum(s): belongs to user, has many photos
- Photo(s): belongs to PhotoAlbum
Controller action:
def set_default_profile_photo photo = Profile.find_by_user_id(current_user.id) photo.photo_id = params[:photo_id] photo.save redirect_to "**HERE IS WHERE I'D LIKE TO REDIRECT TO THE PHOTOALBUM THE PHOTO IS IN**" flash[:success] = "Default photo set!" end
My routes:
users GET /users(.:format) {:action=>"index", :controller=>"users"} POST /users(.:format) {:action=>"create", :controller=>"users"} new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"} edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"} user GET /users/:id(.:format) {:action=>"show", :controller=>"users"} PUT /users/:id(.:format) {:action=>"update", :controller=>"users"} DELETE /users/:id(.:format) {:action=>"destroy", :controller=>"users"} sessions GET /sessions(.:format) {:action=>"index", :controller=>"sessions"} POST /sessions(.:format) {:action=>"create", :controller=>"sessions"} new_session GET /sessions/new(.:format) {:action=>"new", :controller=>"sessions"} edit_session GET /sessions/:id/edit(.:format) {:action=>"edit", :controller=>"sessions"} session GET /sessions/:id(.:format) {:action=>"show", :controller=>"sessions"} PUT /sessions/:id(.:format) {:action=>"update", :controller=>"sessions"} DELETE /sessions/:id(.:format) {:action=>"destroy", :controller=>"sessions"} passwords GET /passwords(.:format) {:action=>"index", :controller=>"passwords"} POST /passwords(.:format) {:action=>"create", :controller=>"passwords"} new_password GET /passwords/new(.:format) {:action=>"new", :controller=>"passwords"} edit_password GET /passwords/:id/edit(.:format) {:action=>"edit", :controller=>"passwords"} password GET /passwords/:id(.:format) {:action=>"show", :controller=>"passwords"} PUT /passwords/:id(.:format) {:action=>"update", :controller=>"passwords"} DELETE /passwords/:id(.:format) {:action=>"destroy", :controller=>"passwords"} profiles GET /profiles(.:format) {:action=>"index", :controller=>"profiles"} POST /profiles(.:format) {:action=>"create", :controller=>"profiles"} new_profile GET /profiles/new(.:format) {:action=>"new", :controller=>"profiles"} edit_profile GET /profiles/:id/edit(.:format) {:action=>"edit", :controller=>"profiles"} profile GET /profiles/:id(.:format) {:action=>"show", :controller=>"profiles"} PUT /profiles/:id(.:format) {:action=>"update", :controller=>"profiles"} DELETE /profiles/:id(.:format) {:action=>"destroy", :controller=>"profiles"} emails GET /emails(.:format) {:action=>"index", :controller=>"emails"} POST /emails(.:format) {:action=>"create", :controller=>"emails"} new_email GET /emails/new(.:format) {:action=>"new", :controller=>"emails"} edit_email GET /emails/:id/edit(.:format) {:action=>"edit", :controller=>"emails"} email GET /emails/:id(.:format) {:action=>"show", :controller=>"emails"} PUT /emails/:id(.:format) {:action=>"update", :controller=>"emails"} DELETE /emails/:id(.:format) {:action=>"destroy", :controller=>"emails"} root / {:controller=>"users", :action=>"new"} success /success(.:format) {:action=>"success", :controller=>"users"} login /login(.:format) {:action=>"new", :controller=>"sessions"} logout /logout(.:format) {:action=>"destroy", :controller=>"sessions"} reset_password /reset_password(.:format) {:action=>"new", :controller=>"passwords"} setup_new_password /setup_new_password(.:format) {:action=>"edit", :controller=>"passwords"} settings /settings(.:format) {:action=>"settings", :controller=>"users"} settings_account /settings/account(.:format) {:controller=>"users", :action=>"account"} settings_edit_profile /settings/edit_profile(.:format) {:controller=>"profiles", :action=>"edit_profile"} /:username(.:format) {:controller=>"users", :action=>"show"} change_password /change_password(.:format) {:action=>"change_password", :controller=>"users"} profile_photo_set_default /profile_photo/set_default(.:format) {:controller=>"photo_albums", :action=>"set_default_profile_photo"} album_photo_set_default /album_photo/set_default(.:format) {:controller=>"photo_albums", :action=>"set_default_album_photo"} photo_albums GET /settings/photo_gallery(.:format) {:action=>"index", :controller=>"photo_albums"} POST /settings/photo_gallery(.:format) {:action=>"create", :controller=>"photo_albums"} new_photo_album GET /settings/photo_gallery/new(.:format) {:action=>"new", :controller=>"photo_albums"} edit_photo_album GET /settings/photo_gallery/:id/edit(.:format) {:action=>"edit", :controller=>"photo_albums"} photo_album GET /settings/photo_gallery/:id(.:format) {:action=>"show", :controller=>"photo_albums"} PUT /settings/photo_gallery/:id(.:format) {:action=>"update", :controller=>"photo_albums"} DELETE /settings/photo_gallery/:id(.:format) {:action=>"destroy", :controller=>"photo_albums"} photos GET /settings/photo_gallery/photos(.:format) {:action=>"index", :controller=>"photos"} POST /settings/photo_gallery/photos(.:format) {:action=>"create", :controller=>"photos"} new_photo GET /settings/photo_gallery/photos/new(.:format) {:action=>"new", :controller=>"photos"} edit_photo GET /settings/photo_gallery/photos/:id/edit(.:format) {:action=>"edit", :controller=>"photos"} photo GET /settings/photo_gallery/photos/:id(.:format) {:action=>"show", :controller=>"photos"} PUT /settings/photo_gallery/photos/:id(.:format) {:action=>"update", :controller=>"photos"} DELETE /settings/photo_gallery/photos/:id(.:format) {:action=>"destroy", :controller=>"photos"}
-
brad over 12 yearsLooks like the right thing to me. If you didn't have the option of using redirect_to :back, you could get the same result with redirect_to PhotoAlbum.where(:id => Photo.where(:id => params[:photo_id]).first.photo_album_id). There are better ways of doing this query but this should work.
-
Stefan Magnuson over 9 yearsThe reason that you did not use
redirect_to :back
is most likely because you are wanting to go back two steps, i.e. if you went 'back' fromcreate
you would be taken back tonew
which is why you actually want to go back two steps to whatever was beforenew
. -
alexventuraio over 7 yearsHow can I pass a
notice
object with theredirect_back
statement in order to tell the user something went wrong with a flash message? -
alexventuraio over 7 yearsWell, I could solve this by doing:
redirect_back(fallback_location: root_path, notice: "Something went wrong!")
. Hope it could help somehow.