Использование devise для регистрации пользователя / входа в систему перенаправляет пользователя на другую страницу формы в зависимости от его ответа - PullRequest
0 голосов
/ 29 октября 2018

Я использую devise для регистрации / входа пользователя, после того, как пользователь успешно зарегистрировался, я хочу показать страницу / диалоговое окно и перенаправить на другую страницу, основываясь на ответе пользователя. Как я могу это сделать?

Модель пользователя (по устройству)

  • имя пользователя
  • пароль

Модель студента

  • имя

  • student_id

Модель учителя

  • имя

  • класс

FIRST_PAGE: регистрация ссылки входа Ссылка для регистрации покажет страницу devise views / devise / registrations / new.html.erb. После успешной регистрации, пользователь переходит на корневую страницу. Я определил корневую страницу вways.rb:

`Rails.application.routes.draw do devise_for: пользователи ресурсы: студенты, преподаватели

# Подробнее о DSL, доступных в этом файле, см. http://guides.rubyonrails.org/routing.html root для: "студенты # индекс" конец `

На данный момент приложение не имеет ни малейшего представления, кто пользователь.

Итак, я хочу получить идентификационную информацию (ученик / учитель) от пользователя.

Как я получу эту информацию?

Контроллер ученика / учителя: `class StudentsController

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

end`

После того, как пользователь успешно вошел в систему, я хочу спросить, является ли пользователь учеником или учителем. В зависимости от того, что они выбрали, перенаправьте их на страницу формы ученика или страницу формы учителя.

Как я могу это сделать в рельсах?

Спасибо

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете написать пользовательскую функцию after_sign_in_path_for в вашем ApplicationController, предполагая, что в противном случае вы используете все стандартные контроллеры 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 является вашим основным инструментом здесь, если только вы не попадаете в мир переопределения стандартных контроллеров devise и прерывания там обычного рабочего процесса для выполнения этого шага, который, по вашему описанию, не является строго необходимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...