2014-08-27 91 views
1

我現在正在使用devise/omniauth。在通過Facebook/Twitter註冊後,我想重定向到一個名爲「驗證電子郵件」的頁面,在那裏他們可以驗證他們的電子郵件地址是否正確。找不到路徑「/ users /」的設計映射。怎麼來的?

我只是想讓localhost:3000/users/verify-email頁面正常工作。我去那個網址,我得到這個錯誤信息:

找不到路徑「/ users/update_email」的設計映射。這可能發生的原因有兩個:1)您忘記將您的路線包裹在範圍區塊內。例如:devise_scope:user do「/ 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的錯誤消息,談到)。這是否意味着我需要明確告訴設計使用哪個映射(錯誤消息的第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 

用戶而不是用戶。