我正在使用devise 4.0.0和rails 4.2.6。我试图设计重定向到用户在进入设计登录页面之前或者在他们单击注销之前的页面(这是一个指向destroy_user_session_path的链接)。我已经阅读了设计如何https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update,它说它已经过时了,我应该阅读我所做的代码https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/store_location.rb,但这并没有帮助我弄清楚我需要做什么。我搜索了一堆SO Q / As,其中许多也过时了。其中一个为我工作sign_in。我补充说:
before_filter :store_current_location, :unless => :devise_controller?
private
def store_current_location
store_location_for(:user, request.url)
end
到我的ApplicationController。但退出仍然回归根。我重写了after_sign_out_path_for(资源)并发现stored_location_for(resource)是nil。我无法弄清楚为什么。其他SO Q / As建议:
private
def after_sign_out_path_for(resource)
stored_location_for(resource) || request.referrer || root_path
end
这似乎是通过request.referrer部分完成的。我无法弄清楚存储位置的删除位置。在我上面链接的设计代码中,只有当我们检索它时才会删除存储的位置,这似乎不会发生。
我是Rails的新手,所以我可能会发现一些非常明显的事情。任何人都可以向我解释为什么stored_location_for(资源)是零?或者它被删除的地方?
答案 0 :(得分:0)
尝试
request.referrer
以获取上一个网址