How do I redirect back to a page I'm currently on?

35,920

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

Share:
35,920
LondonGuy
Author by

LondonGuy

Loving the experience.

Updated on July 09, 2020

Comments

  • LondonGuy
    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 the photo_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
    brad over 12 years
    Looks 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
    Stefan Magnuson over 9 years
    The 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' from create you would be taken back to new which is why you actually want to go back two steps to whatever was before new.
  • alexventuraio
    alexventuraio over 7 years
    How can I pass a notice object with the redirect_back statement in order to tell the user something went wrong with a flash message?
  • alexventuraio
    alexventuraio over 7 years
    Well, I could solve this by doing: redirect_back(fallback_location: root_path, notice: "Something went wrong!"). Hope it could help somehow.