我将尝试以一种简单的方式来说明它。我在/users/sign_up
页面上有一个注册按钮(重定向到/visitors/owner-faq
页面)。注册后我想要此页面的URL
(/visitors/owner-faq
),以便我可以使用它来设置类似
if sign_up_from_url == '/visitors/owner-faq'
@user.role = 'Owner'
end
我试图在 Controller 中使用
request.referer
,但是它给了我/users/sign_up
而不是/visitors/owner-faq
。但是,当我在注册 View 页面中使用<%= url_for(:back) %>
时,它给了我想要的/visitors/owner-faq
,但是我不知道如何在 Controller 中访问它。谁能建议我如何在 Controller 中访问该值?我正在使用设计进行注册。 最佳答案
如果用户在/visitors/owner-faq
页面上并单击注册链接,则发生的情况是注册页面中的引荐来源网址为/visitors/owner-faq
。这就是url_for(:back)
在该页面上起作用的原因。现在,在注册页面中提交表单后,引荐来源网址现在更改为注册网址,这很有意义。
您要做的是在用户访问注册页面时将引荐来源网址保存在 session 中。因此,在提供注册页面的操作中(例如,这是用户的新操作)
class UsersController < ApplicationController
def new
session[:referrer] = request.referrer
end
end
因此,当用户提交注册表单时,您可以访问 session
def create
referrer = session.delete(:referrer)
user = User.new
user.role = 'owner' if referrer == '/visitors/owner-faq'
user.save!
end