2014-08-27 4 views
1

Я сейчас работаю с 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 

Спасибо! Если вы, ребята, хотите узнать больше о моем коде, просто дайте мне знать.

ответ

11

Упс.

я писал:

devise_scope :users do 

Должно быть:

devise_scope :user do 

не пользователь пользователи.