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

Pav*_*van 5 ruby-on-rails devise ruby-on-rails-4

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

if sign_up_from_url == '/visitors/owner-faq'
 @user.role = 'Owner'
end
Run Code Online (Sandbox Code Playgroud)

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

jvn*_*ill 18

如果用户在/visitors/owner-faq页面上并单击注册链接,则会发生以下情况:注册页面中的引荐来源是/visitors/owner-faq.这就是为什么url_for(:back)在该页面上工作的原因.现在,在注册页面中提交表单后,引用者现在已更改为注册网址,这是有道理的.

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

class UsersController < ApplicationController
  def new
    session[:referrer] = request.referrer
  end
end
Run Code Online (Sandbox Code Playgroud)

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

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