如何在Rails 4中获取上一页的referer url

时间:2015-06-06 16:18:13

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

我会尝试以简单的方式。我在/users/sign_up页面上有一个注册按钮 (重定向到/visitors/owner-faq页面)。注册后我想要此页面的URL/visitors/owner-faq),以便我可以使用它来设置类似

的内容
if sign_up_from_url == '/visitors/owner-faq'
 @user.role = 'Owner'
end

我尝试在控制器中使用request.referer,但它给了我/users/sign_up而不是/visitors/owner-faq。但是,当我在注册视图页面中使用<%= url_for(:back) %>时,它会给我/visitors/owner-faq我想要的内容。但我无法弄清楚如何在控制器中访问它。任何人都可以建议我如何在控制器中访问该值?我正在使用设计进行注册。

2 个答案:

答案 0 :(得分:16)

如果用户位于/visitors/owner-faq页面并点击了注册链接,则注册页面中的引荐来源为url_for(:back)。这就是class UsersController < ApplicationController def new session[:referrer] = request.referrer end end 在该页面上工作的原因。现在,在注册页面中提交表单后,引荐来源现在已更改为注册网址,这是有道理的。

您要做的是在用户访问注册页面时将引荐来源保存在会话中。因此,在为注册页面提供服务的操作中(比如用户的新操作)

def create
  referrer  = session.delete(:referrer)
  user      = User.new
  user.role = 'owner' if referrer == '/visitors/owner-faq'
  user.save!
end

因此,当用户提交注册表单时,您可以访问会话

{{1}}

答案 1 :(得分:1)

即使您不必存储会话

if request.referrer == sign_up_from_url
  super 
end

这将在sign_up_from_url之前为您提供最后一个推荐人。