我使用设备进行用户注册/登录,在用户成功注册后,我想显示一个页面/a对话框,并根据用户响应重定向到另一个页面。我该怎么做?
用户模型(按设计(
- 用户名
- 密码
学生模型
-
名称
-
student_id
教师模型
-
名称
-
等级
First_page:注册登录链接注册链接将显示design-views/design/registers/new.html.erb页面。成功注册后,它会将用户带到根页面。我已经在routes.rb:中定义了根页面
`Rails.application.routes.draw dodevise_for:用户资源:学生,:教师
#有关此文件中可用DSL的详细信息,请参阅http://guides.rubyonrails.org/routing.htmlroot到:"学生#索引"结束`
在这一点上,应用程序根本不知道用户是谁
所以,我想从用户那里获得身份信息(学生/老师(。
我将如何获得这些信息?
学生/教师管理员:`class StudentsController<应用程序控制器before_action:authenticate_user!,仅:[:新建,:创建]def索引@students=Student.all结束
def new
@student = Student.new
end
def create
current_user.create_student(student_params)
redirect_to root_path
end
private
def student_params
params.require(:student).permit(:name, :skypid)
end
结束`
用户成功登录后,我想询问用户是学生还是老师。根据他们选择的内容,将他们重定向到学生表格页面或教师表格页面。
我怎么能在铁轨上做到这一点?
谢谢
您可以在ApplicationController
中编写一个自定义after_sign_in_path_for
函数,假设您使用的是所有默认的Devise控制器。它返回的任何命名路径帮助程序或其他路由都将是用户被重定向的地方,所以你可以做一些简单的事情,比如总是重定向到一个显示选项并在后续操作中处理选择的选择页面:
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
钩子是你的主要工具,除非你进入了覆盖默认的设计控制器并中断那里的常规工作流程来适应这一步骤的世界,根据你的描述,这似乎不是绝对必要的。