Rails:存储以前的URL,即使页面被重定向



在我的应用程序控制器中,我有这样的内容:

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

相关内容

  • 没有找到相关文章