我正在使用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
答案 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控制器并中断那里的常规工作流程以适应这一步骤,但这在您的描述中似乎并不是绝对必要的。