我会尝试以简单的方式。我在/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
我想要的内容。但我无法弄清楚如何在控制器中访问它。任何人都可以建议我如何在控制器中访问该值?我正在使用设计进行注册。
答案 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
之前为您提供最后一个推荐人。