2014-08-27 2 views
1

저는 지금 devise/omniauth와 함께 일하고 있습니다. facebook/twitter를 통해 가입 한 후 "verify-email"페이지로 리디렉션하여 이메일 주소가 올바른지 확인할 수 있습니다.경로 "/ users /"에 대한 장치 매핑을 찾을 수 없습니다. 어째서?

지금 바로 localhost:3000/users/verify-email 페이지가 작동하도록 노력하고 있습니다. 나는 그 URL로 이동하고이 오류 메시지가 나타납니다.

경로 "/ users/update_email"에 대한 장치 매핑을 찾을 수 없습니다. 이것은 두 가지 이유에서 발생할 수 있습니다. 1) 스코프 블록 내부로 경로를 감싸는 것을 잊었습니다. 예 : devise_scope : user do/"/ some/route"=> "some_devise_controller"end 2) 라우터를 우회하는 Devise 컨트롤러를 테스트하고 있습니다. 그렇다면 Devise에게 어떤 매핑을 사용할 지 명시 할 수 있습니다 : @ request.env [ "devise.mapping"] = Devise.mappings [: user]. 나는 (무엇 # 1 오류 메시지에 대한 이야기의 인) 잘못 범위 블록의 경로를 바꿈 ​​생각하지 않는다

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 

:

그래서 여기 내 routes.rb입니다. 그렇다면 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 

사용자가 아닌 사용자.

관련 문제