Ответ 1
redirect_to :back
работал у меня, но я хочу посмотреть, был ли это правильный выбор
http://api.rubyonrails.org/files/actionpack/lib/action_controller/metal/redirecting_rb.html
На моей странице фотоальбома пользователей они видят фотографии, которые они загрузили, и каждая фотография имеет ссылку "сделать по умолчанию".
Когда пользователь нажимает make default
, тогда идентификатор фотографии сохраняется в столбце photo_id
таблицы моих профилей.
Проблема перенаправляет их обратно на:
localhost:3000/settings/photo_gallery/:id
Есть ли способ перенаправить обратно на фотоальбом, используя идентификатор фотографии, которая только что была установлена по умолчанию? Может ли Rails найти, на каком альбоме я хочу перенаправить, просто глядя на идентификатор фотографии, поскольку фотография принадлежит к фотоальбому, а в фотоальбоме много фотографий?
В моей базе данных есть следующие таблицы:
Действие контроллера:
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"}
redirect_to :back
работал у меня, но я хочу посмотреть, был ли это правильный выбор
http://api.rubyonrails.org/files/actionpack/lib/action_controller/metal/redirecting_rb.html
Это то, что вы хотите:
redirect_to request.referrer
Дальнейшая ссылка: http://en.wikipedia.org/wiki/HTTP_referer
В Rails 5 была введена функция:
redirect_back(fallback_location: root_path)
Он перенаправляет назад всякий раз, когда известен HTTP_REFERER
. В противном случае он перенаправляется на fallback_location
.
redirect_to :back
устарел и будет удален из Rails 5.1.
В одном проекте мы использовали сеанс для временного хранения, потому что redirect_to :back
не работал для нас.
Мы имели def new
, где мы установили session[:return_to] = request.referer
в def create
мы добавили redirect_to session[:return_to]
.
Я больше не знаю, почему мы не могли использовать redirect_to :back
Если вы пришли со страницы photo_album, вы сможете сделать:
redirect_to :back
В противном случае вы сможете выполнить именованный маршрут, например:
redirect_to photo_album_path(photo.album_id) # or whatever the association key is
Кстати, почему у вас есть сопоставление photos_albums на photos_galleries? Это гораздо менее запутанно, если вы назвали свои ресурсы и маршруты аналогичным образом. т.е.: если вы хотите использовать конечные точки маршрута для использования /photo _galleries, вы должны назвать свой ресурс PhotoGallery.