我有一个页面,其中列出了所有的项目,有排序的标题和分页。
path:
/projects?order=asc&page=3&sort=code
我选择编辑其中一个项目
path:
projects/436/edit
当我单击该页面上的保存时,它将调用项目控制器/更新方法。更新代码后,我希望重定向到单击edit a specific project之前所在的路径。换句话说,我希望在同一个页面上进行相同的排序。
我看到了link_to( :back ),并认为:back可以在redirect_to(:back)中工作,但这是行不通的。
puts YAML::dump(:back)
yields the following:
:back
有什么建议吗?我怎么才能让它起作用。这似乎是一个很容易解决的问题,但我是RoR的新手。
发布于 2010-01-26 22:41:33
在您的编辑操作中,将请求url存储在会话散列中,该散列可用于多个请求:
session[:return_to] ||= request.referer
然后在成功保存后,在更新操作中重定向到它:
redirect_to session.delete(:return_to)
发布于 2011-02-13 20:51:20
为什么redirect_to(:back)
对你不起作用,为什么它是不可行的?
redirect_to(:back)
对我来说就像是一种魅力。这只是redirect_to(request.env['HTTP_REFERER'])
的一条捷径
http://apidock.com/rails/ActionController/Base/redirect_to (Rails 3之前的版本)或http://apidock.com/rails/ActionController/Redirecting/redirect_to ( Rails 3)
请注意,redirect_to(:back)
在Rails 5中已被弃用。
改为redirect_back(fallback_location: 'something')
(参见http://blog.bigbinary.com/2016/02/29/rails-5-improves-redirect_to_back-with-redirect-back.html)
发布于 2010-10-22 00:01:16
我喜欢Jaime的方法,但有一个例外,每次重新存储referer对我来说效果更好:
def edit
session[:return_to] = request.referer
...
原因是,如果您编辑多个对象,您将始终被重定向回使用Jaime的方法存储在会话中的第一个URL。例如,假设我有Apple和Orange对象。我编辑苹果,session[:return_to]
被设置为该操作的引用者。当我使用相同的代码编辑Orange时,session[:return_to]
不会被设置,因为它已经被定义了。因此,当我更新Orange时,我将被发送到前一个Apple#edit操作的referer。
https://stackoverflow.com/questions/2139996
复制相似问题