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