Я использую Omniauth с устройством devise, когда провайдер не отправляет электронную почту, пользователю необходимо подтвердить его вручную (для создания нового пользователя в БД).Я отрисовываю это без передачи аргументов:
render 'omniauth_callbacks/confirm_email'
verify_email.html.slim выглядит так - у него нет модели:
h1 Enter your email
= form_with(url: confirm_email_path, method: :post) do |f|
= f.label :Email
= f.email_field :email
= f.submit 'Confirm email'
Кнопка «Отправить» приводит к методу, который создает ожидающего пользователяавторизация и отправка письма с подтверждением на указанный адрес электронной почты.
def confirm_email
pending_user = User.find_or_init_skip_confirmation(params[:email])
if pending_user
authorization = pending_user.authorizations.create!(provider: session[:auth]['provider'], uid: session[:auth]['uid'],
linked_email: params[:email], confirmation_token: Devise.friendly_token[0, 20],
confirmation_sent_at: Time.now)
OauthMailer.send_confirmation_letter(authorization).deliver_now
redirect_to root_path, notice: "Great! Now confirm your email, we've sent you a letter!"
else
render 'omniauth_callbacks/confirm_email', alert: "We couldn't verify your email, please try again later"
end
end
Все работает нормально, но я не знаю, как отобразить ошибки, которые могут возникнуть.Все ошибки довольно хорошо видны в консоли, например, я получил:
ActiveRecord :: RecordInvalid (Проверка не удалась: Uid уже был занят) - когда письмо с подтверждением уже было отправлено на электронную почту.или
ActiveRecord :: RecordNotSaved (Вы не можете вызвать create, если родитель не сохранен) - когда электронное письмо было пустым, и я не мог создать ожидающего пользователя.
Обычно я использовал бы стандартный render 'shared/errors', resource: resource
, но для этого требуется ресурс, которого у меня нет в форме.