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

时间:2021-01-11 21:17:53

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.

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

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?

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

I have the following tables in my database:

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

  • User(s): has one profile, has many PhotoAlbums
  • 用户:有一个个人资料,有很多PhotoAlbums
  • Profile(s): belongs to user
  • 个人资料:属于用户
  • PhotoAlbum(s): belongs to user, has many photos
  • PhotoAlbum(s):属于用户,有很多照片
  • Photo(s): belongs to PhotoAlbum
  • 图片:属于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"}

6 个解决方案

#1


21  

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

redirect_to:回来为我工作,但我想看看这是否是正确的选择http://api.rubyonrails.org/files/actionpack/lib/action_controller/metal/redirecting_rb.html

#2


14  

This is what you want:

这就是你想要的:

redirect_to request.referrer

For further reference: http://en.wikipedia.org/wiki/HTTP_referer

如需进一步参考:http://en.wikipedia.org/wiki/HTTP_referer

#3


4  

In Rails 5 it was introduced the function:

在Rails 5中引入了以下功能:

redirect_back(fallback_location: root_path)

It does redirect back whenever the HTTP_REFERER is known. Otherwise it redirects to the fallback_location.

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

The redirect_to :back is deprecated and will be removed from Rails 5.1.

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

#4


1  

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

在一个项目中,我们使用会话进行临时存储,因为redirect_to:back对我们不起作用。我们有一个def new我们在def创建会话[:return_to] = request.referer,我们添加了redirect_to session [:return_to]。我不知道,为什么我们不能使用redirect_to:back

#5


0  

If you came from the photo_album page, you should be able to do:

如果您来自photo_album页面,您应该可以:

redirect_to :back

Otherwise, you should be able to do a named route like:

否则,你应该能够做一个命名的路线,如:

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

BTW, why do you have photo_albums mapping to photo_galleries? It's a lot less confusing if you named your resources and routes in a similiar manner. ie: if you wanted your route endpoints to use /photo_galleries you should name your resource PhotoGallery.

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

#6


0  

There is also this handy way to deal with it.

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

render :nothing => true

#1


21  

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

redirect_to:回来为我工作,但我想看看这是否是正确的选择http://api.rubyonrails.org/files/actionpack/lib/action_controller/metal/redirecting_rb.html

#2


14  

This is what you want:

这就是你想要的:

redirect_to request.referrer

For further reference: http://en.wikipedia.org/wiki/HTTP_referer

如需进一步参考:http://en.wikipedia.org/wiki/HTTP_referer

#3


4  

In Rails 5 it was introduced the function:

在Rails 5中引入了以下功能:

redirect_back(fallback_location: root_path)

It does redirect back whenever the HTTP_REFERER is known. Otherwise it redirects to the fallback_location.

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

The redirect_to :back is deprecated and will be removed from Rails 5.1.

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

#4


1  

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

在一个项目中,我们使用会话进行临时存储,因为redirect_to:back对我们不起作用。我们有一个def new我们在def创建会话[:return_to] = request.referer,我们添加了redirect_to session [:return_to]。我不知道,为什么我们不能使用redirect_to:back

#5


0  

If you came from the photo_album page, you should be able to do:

如果您来自photo_album页面,您应该可以:

redirect_to :back

Otherwise, you should be able to do a named route like:

否则,你应该能够做一个命名的路线,如:

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

BTW, why do you have photo_albums mapping to photo_galleries? It's a lot less confusing if you named your resources and routes in a similiar manner. ie: if you wanted your route endpoints to use /photo_galleries you should name your resource PhotoGallery.

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

#6


0  

There is also this handy way to deal with it.

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

render :nothing => true