如何重定向回我目前所在的页面?

在我的用户相册页面中,他们会看到他们上传的照片,每张照片上都有一个“默认设置”链接。 当用户点击make default ,照片的ID将存储在我的个人资料表的photo_id列中。

问题是将它们重定向回:

 localhost:3000/settings/photo_gallery/:id 

有没有办法可以使用刚刚设置为默认照片的ID重定向回相册? Rails可以通过查看照片的ID来查找我想要重定向的相册,因为照片属于相册,相册中有很多照片吗?

我的数据库中有以下表格:

  • 用户:有一个个人资料,有很多PhotoAlbums
  • 个人资料:属于用户
  • PhotoAlbum(s):属于用户,有很多照片
  • 图片:属于PhotoAlbum

控制器动作:

 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中引入了以下function:

 redirect_back(fallback_location: root_path) 

只要知道HTTP_REFERER它就会重定向。 否则,它会重定向到fallback_location

不推荐使用redirect_to :back ,将从Rails 5.1中删除。

在一个项目中,我们使用会话进行临时存储,因为redirect_to :back对我们不起作用。 我们有一个def new我们在def create session[:return_to] = request.referer ,我们添加了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 

顺便说一句,为什么你有photo_albums映射到photo_galleries? 如果您以类似的方式命名资源和路线,那就不那么容易混淆了。 即:如果您希望路径端点使用/ photo_galleries,则应将资源命名为PhotoGallery。

还有这种处理它的方便方法。

 render :nothing => true