Rails разработали регистрацию двумя способами после sign_up - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу devise для перенаправления на конкретное действие индекса контроллера (или на определенную страницу) после того, как пользователь sign_up.

Подробно, у меня есть приложение с двумя способами регистрации: для client и для Professor.На самом деле, тип 2 использует одну и ту же страницу регистрации, она работает очень хорошо, но когда они регистрируются, они автоматически перенаправляются на одну и ту же страницу ... Итак, я хочу изменить способ следующим образом: - когда пользователь нажимает I want to become Professor iхочу зарегистрироваться (полное имя, адрес электронной почты, пароль) и перенаправить после sign_up на панель инструментов 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 голосов
/ 14 февраля 2019

Почему бы не использовать только одну ссылку, а затем позволить пользователю выбрать свою роль в представлении регистрации?

Если вы действительно хотите две ссылки для одного и того же представления, вы должны передать роль в параметре (что-то ссылкаlink_to 'Becoming a Professor', new_registration_path(role: 'professor'), затем добавьте скрытое поле в форму регистрации со значением параметра.

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

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

Также в application_controller должен быть after_sign_in_path_for(resource). Вам понадобится столбец в пользователях для указания роли, и ваш метод будет выглядеть примерно так:

def after_sign_in_path_for(resource)
  stored_location_for(resource) || (resource.role.professor? ? professor_dashboard_url : user_dashboard_url(resource))
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...