在Rails中的会话[:previous_url]中从URL中删除参数

时间:2016-03-08 03:07:28

标签: ruby-on-rails

我正在尝试使用覆盖Devise的#after_sign_in_path_for来重定向到用户的最后一个URL页面或根路径:

  # Redirects on successful sign in
  def after_sign_in_path_for(resource)
    puts session[:previous_url]
    if session[:previous_url] != email_confirmation_url
      session[:previous_url] || root_path
    else
      root_path
    end
  end

如果previous_url与email_confirmation_url相同,我不希望它重定向到上一页。但是,我的问题是,即使在会话结束时添加了参数[:previous_url],我仍希望该规则保持不变。我遇到的问题是

email_confirmation_url == /users/confirmation
session[:previous_url] == /users/confirmation?confirmation_token=HGESMzRz2sz1UbsvudSS

或其他一些令牌值。我想从URL中删除确认令牌或任何其他参数,然后进行比较。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

假设所有网址参数都在网址?之后,您可以这样做:

if session[:previous_url].split('?').first != email_confirmation_url
  session[:previous_url] || root_path
else
  root_path
end

您也可以使用start_with?检查session[:previous_url]是否以email_confirmation_url开头:

if !session[:previous_url].start_with? email_confirmation_url
  session[:previous_url] || root_path
else
  root_path
end

答案 1 :(得分:-1)

尝试使用

request.path

request.base_url + request.path