小编Mas*_*lin的帖子

找不到路径"/ users /"的设计映射.怎么会?

我正在使用devise/omniauth.通过facebook/twitter注册后,我想重定向到一个名为"verify-email"的页面,在那里他们可以验证他们的电子邮件地址是否正确.

我只是想让localhost:3000/users/verify-email页面立即正常工作.我去那个网址,我收到此错误消息:

找不到路径"/ 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
Run Code Online (Sandbox Code Playgroud)

我不认为我错误地在范围块中包装路由(这是错误消息的#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 …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise omniauth omniauth-facebook

2
推荐指数
1
解决办法
3663
查看次数