我現在正在使用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
謝謝!如果你們想知道更多關於我的代碼的信息,請告訴我。