我将尝试以一种简单的方式来说明它。我在/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

07-27 20:19