Я сейчас работаю с devise/omniauth. После регистрации через facebook/twitter я хочу перенаправить на страницу под названием «verify-email», где они смогут проверить правильность адреса электронной почты.Не удалось найти конфигурацию разработки для пути «/ users /». Как так?
Я просто пытаюсь получить страницу localhost:3000/users/verify-email
, чтобы работать прямо сейчас. Я перехожу к этому URL-адресу, и я получаю это сообщение об ошибке:
Не удалось найти схему разработки для пути "/ users/update_email". Это может произойти по двум причинам: 1) Вы забыли обернуть свой маршрут внутри блока области видимости. Например: devise_scope: user do get "/ some/route" => "some_devise_controller" end 2) Вы тестируете контроллер Devise в обход маршрутизатора. Если это так, вы можете явно указать Devise, какое отображение использовать: @ request.env ["devise.mapping"] = Devise.mappings [: user].
Так вот мой routes.rb:
Rails.application.routes.draw do
...
devise_for :users, :controllers => {
omniauth_callbacks: 'custom_devise_controllers/omniauth_callbacks',
registrations: 'custom_devise_controllers/registrations' }
devise_scope :users do
get "users/verify_email" => 'custom_devise_controllers/registrations#verify_email'
end
...
end
Я не думаю, что завернуть маршрут в блоке области действия неправильно (что # 1 из сообщения об ошибке говорит о). Означает ли это, что мне нужно явно указать Devise, какое отображение использовать (что такое № 2 сообщения об ошибке)? В сообщении об ошибке говорится, что я могу определить, какое сопоставление использовать для этого: @request.env["devise.mapping"] = Devise.mappings[:user].
Должен ли я помещать это в свой custom_devise_controllers/registrations_controller.rb? Или вы, ребята, думаете, что что-то еще происходит?
я включу мой "custom_devise_controllers/registrations_controller.rb":
class CustomDeviseControllers::RegistrationsController < Devise::RegistrationsController
def update
@user = User.find(current_user.id)
successfully_updated = if needs_password?(@user, params)
@user.update_with_password(devise_parameter_sanitizer.sanitize(:account_update))
else
params[:user].delete(:current_password)
@user.update_without_password(devise_parameter_sanitizer.sanitize(:account_update))
end
if successfully_updated
set_flash_message :notice, :updated
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
render "edit"
end
end
def after_sign_up_path_for(resource)
users_update_email_path
end
def verify_email
end
private
def needs_password?(user, params)
params[:user][:password].present? || params[:user][:password_confirmation].present?
end
end
Спасибо! Если вы, ребята, хотите узнать больше о моем коде, просто дайте мне знать.