Rails在注册后通过两种方式设计注册

时间:2019-02-14 09:53:24

标签: ruby-on-rails devise

我要devise在用户注册后重定向到特定的控制器索引操作(或特定的页面)。

详细地说,我有一个具有2种注册方式的应用程序:clientProfessor。实际上,这2种类型使用相同的注册页面,效果很好,但是当他们注册时,它们会自动重定向到同一页面... 所以,我想改变这种方式: -当用户单击I want to become Professor时,我要注册(全名,邮件,密码),并在注册后重定向到Professor仪表板 -并且当用户单击Client时,我最后要使用“相同方式”注册,但我想重定向到client's dashboard

所以,我开始更改devise.rb来更改

config.allow_unconfirmed_access_for = 2.days (automatically login after sign_up)

在我的RegistrationsController中,我将after_sign_up_path_for覆盖为类似

def after_sign_up_path_for(resource)
  if 'user is Prof'
    redirect_path_professor 
  else
    redirect_path_client
  end
end 

但是如果用户单击Prof.Client,我该如何检查(处于状态)?它是相同的资源(注册)^^ 谢谢

1 个答案:

答案 0 :(得分:0)

为什么不只使用一个链接,而是让用户在注册视图中选择他的角色?

如果您确实希望为同一视图使用两个链接,则应在param中传递角色(链接link_to 'Becoming a Professor', new_registration_path(role: 'professor'),然后在注册表单中添加一个带有param值的hidden_​​field。

= f.input :role, as: :hidden, input_html: { value: params[:role] }

但是请不要忘记验证参数的内容,以避免取笑用户发送的错误值

此外,after_sign_in_path_for(resource)应该在application_controller中。您将需要在用户栏中指定角色,然后您的方法将如下所示:

def after_sign_in_path_for(resource)
  stored_location_for(resource) || (resource.role.professor? ? professor_dashboard_url : user_dashboard_url(resource))
end