在我的应用程序控制器中,我有这样的内容:
after_filter :store_location
def store_location
# store last url as long as it isn't a /users path
session[:previous_url] = request.fullpath unless request.fullpath =~ //users/
end
def after_sign_in_path_for(resource)
session[:previous_url] || root_path
end
对于存储之前的url,这很好,但是在某些页面上,我会自动重定向到登录页面,如下所示:
before_filter :require_login
def require_login
unless current_user
redirect_to new_user_session_path
end
end
在用户被重定向(使用require_login过滤器)的页面上,它不存储以前的url。它只是默认为root_path。
如何为重定向的用户正确存储以前的url ?
devise
提供了称为stored_location_for
的方法,它将为您完成工作
def after_sign_in_path_for(resource)
stored_location_for(resource) || root_path
end
明白了。问题是我使用了:
after_filter :store_location
但是url的存储需要立即发生(在重定向之前)。所以问题就解决了:
before_filter :store_location
并确保它落在前面:
before_filter :require_login