10

На моей странице фотоальбома пользователя они видят фотографии, которые они загрузили, и каждая фотография имеет ссылку «сделать по умолчанию». Когда пользователь нажимает make default, тогда идентификатор фотографии сохраняется в столбце photo_id моей таблицы профилей.Как перенаправить обратно на страницу, в которой я сейчас?

вопрос перенаправляет их обратно:

localhost:3000/settings/photo_gallery/:id 

Есть ли способ, я могу перенаправить обратно в фотоальбом, используя идентификатор фотографии, который только что был установлен по умолчанию? Может ли Rails найти, на каком альбоме я хочу перенаправить, просто просмотрев идентификатор фотографии, поскольку фотография принадлежит фотоальбому, а в фотоальбоме много фотографий?

У меня есть следующие таблицы в моей базе данных:

  • пользователя (ей): есть один профиль, имеет много фотоальбомов
  • профиля (s): принадлежит пользователю
  • PhotoAlbum (ы): принадлежит пользователю, имеет много фотографий
  • Фото (s): принадлежит фотоальбоме

регулятор:

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 

Мои маршруты:

    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"} 
+0

Эта ссылка может быть полезна для вас. Надеюсь, это поможет. http://stackoverflow.com/questions/2139996/ruby-on-rails-redirect-toback – piam

ответ

20

redirect_to :back работал для меня, но я хочу, чтобы увидеть, если это был правильный выбор http://api.rubyonrails.org/files/actionpack/lib/action_controller/metal/redirecting_rb.html

+1

Похож на правильную вещь для меня. Если у вас не было возможности использовать redirect_to: back, вы можете получить тот же результат с redirect_to PhotoAlbum.where (: id => Photo.where (: id => params [: photo_id]). First.photo_album_id). Есть лучший способ сделать этот запрос, но это должно сработать. – brad

1

В одном проекте мы использовали сессию для временного хранения, поскольку redirect_to :back не работали для нас. У нас был def new, где мы установили session[:return_to] = request.referer в def create мы добавили redirect_to session[:return_to]. Я не знаю больше, поэтому мы не могли использовать redirect_to :back

+1

Причина, по которой вы не использовали 'redirect_to: back', скорее всего, потому что вы хотите вернуться ** двумя ** шагами, то есть, если вы вернетесь назад из' create', вы вернетесь к 'new' поэтому вы действительно хотите вернуться к двум шагам до того, что было до «нового». –

0

Если вы пришли со страницы photo_album, вы должны быть в состоянии сделать:

redirect_to :back 

В противном случае, вы должны быть в состоянии сделать именованный маршрут например:

redirect_to photo_album_path(photo.album_id) # or whatever the association key is 

BTW, почему у вас есть сопоставление фотоальбомов на phot_galleries? Это гораздо менее запутанно, если вы назвали свои ресурсы и маршруты аналогичным образом. т.е.: если вы хотите использовать конечные точки маршрута для использования/photo_galleries, вы должны назвать свой ресурс PhotoGallery.

3

В Rails 5 была введена функция:

redirect_back(fallback_location: root_path) 

Он перенаправляет обратно каждый раз, когда HTTP_REFERER известен. В противном случае он перенаправляется на fallback_location.

redirect_to :back устарел и будет удален из Rails 5.1.

+0

Как передать объект «уведомление» с помощью оператора «redirect_back», чтобы сообщить пользователю, что что-то пошло не так с флэш-сообщением? –

+3

Ну, я мог бы решить это, выполнив: ** 'redirect_back (fallback_location: root_path, обратите внимание:« Что-то пошло не так! »)' **. Надеюсь, что [это возможно] (http://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_back) поможет. –

Смежные вопросы