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

时间:2014-03-19 20:34:11

标签: ruby-on-rails ruby ruby-on-rails-3 devise

在我的应用程序控制器中,我有类似的东西:

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     

这适用于存储以前的网址,但是在某些网页上我会自动重定向到登录页面,如下所示:

before_filter :require_login

def require_login
  unless current_user
    redirect_to new_user_session_path
  end
end

在重定向用户的页面上(使用require_login过滤器),它不存储以前的URL。它只是将它们默认为root_path。

如何为重定向的用户正确存储以前的网址?

2 个答案:

答案 0 :(得分:1)

devise提供了一种名为stored_location_for的方法,可以为您完成工作

  def after_sign_in_path_for(resource)
    stored_location_for(resource) || root_path
  end

答案 1 :(得分:0)

想出来。问题是我使用:

after_filter :store_location

但是需要立即存储url(在重定向之前)。所以问题通过使用:

解决了
before_filter :store_location

确保它落在之前:

before_filter :require_login