【问题标题】:Could not find devise mapping for path "/users/". How come?找不到路径“/users/”的设计映射。怎么会?
【发布时间】:2014-08-27 21:35:27
【问题描述】:

我现在正在与 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 使用哪个映射:@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

谢谢!如果你们想知道更多关于我的代码的信息,请告诉我。

【问题讨论】:

    标签: ruby-on-rails ruby devise omniauth omniauth-facebook


    【解决方案1】:

    哎呀。

    我写道:

    devise_scope :users do
    

    应该是:

    devise_scope :user do
    

    用户不是用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多