使用devise进行用户注册/登录可根据用户的响应将其重定向到其他表单页面

时间:2018-10-29 18:48:10

标签: ruby-on-rails devise

我正在使用devise进行用户注册/登录,在用户成功注册之后,我想显示一个页面/对话框,并根据用户响应重定向到另一个页面。我该怎么办?

用户模型(按设计)

  • 用户名
  • 密码

学生模型

  • 名称

  • student_id

教师模型

  • 名称

  • 等级

首页: 注册登录链接 注册链接将显示devise视图/devise/registrations/new.html.erb页面。 成功注册后,它将带用户进入根页面。我已经在routes.rb中定义了根页面:

`Rails.application.routes.draw做   devise_for:用户   资源:学生,:老师

#有关此文件中可用DSL的详细信息,请参见http://guides.rubyonrails.org/routing.html   根源:“ students#index” 结束`

这时,应用程序不知道用户是谁。

所以,我想从用户那里获取身份信息(学生/老师)。

我将如何获得此信息?

学生/老师控制器: `class StudentsController

//tr//td[contains(.,'10-29-2018')]//preceding::td[1]/a

结束`

用户成功登录后,我想询问用户是学生还是老师。根据他们的选择,将他们重定向到学生表格页面或教师表格页面。

我该怎么做?

谢谢

1 个答案:

答案 0 :(得分:0)

假设您使用其他所有默认Devise控制器,则可以在after_sign_in_path_for中编写自定义ApplicationController函数。返回的任何命名路径帮助程序或其他路由都将被重定向到用户,因此您可以执行一些简单的操作,例如始终重定向到一个选择页面,该页面显示选项并在后续操作中处理选择:

def after_sign_in_path_for(resource)
  user_type_selection_path # whatever route in your app manages the selection
end

或者,您可以在该函数中的用户模型上调用自定义方法以在此处进行选择:

def after_sign_in_path_for(resource)
  resource.student? ? student_path : teacher_path
end

当然,您也可以在选择后将它们混合在一起进行后者,否则可以重定向,类似于以下内容:

def after_sign_in_path_for(resource)
  if resource.user_type_chosen?
    resource.student? ? student_path : teacher_path
  else
    user_type_selection_path
end

请记住,这些功能或路径都不是真实的,因为我无法更加具体地说明您所提供的信息,但是希望这可以使您朝正确的方向前进。 after_sign_in_path_for钩子是这里的主要工具,除非您不了解覆盖默认的devise控制器并中断那里的常规工作流程以适应这一步骤,但这在您的描述中似乎并不是绝对必要的。