Ruby on rails “设计控制器”;未初始化的常量Api::V1::RegistrationController“;仅在Rails API中

Ruby on rails “设计控制器”;未初始化的常量Api::V1::RegistrationController“;仅在Rails API中,ruby-on-rails,devise,Ruby On Rails,Devise,我正在创建一个rails api,我希望资源在/api/v1/路由下,包括注册和身份验证 我创建了以下路线,为我提供了设计所需的路线: config/routes.rb namespace :api, defaults: { format: :json } do namespace :v1 do devise_for :users, as: 'api' end end 它规定: Prefix Verb URI Pattern

我正在创建一个rails api,我希望资源在
/api/v1/
路由下,包括注册和身份验证

我创建了以下路线,为我提供了设计所需的路线:

config/routes.rb

namespace :api, defaults: { format: :json } do
  namespace :v1 do
    devise_for :users, as: 'api'
  end
end
它规定:

                      Prefix Verb   URI Pattern                      Controller#Action
          new_api_user_session GET    /api/v1/users/sign_in(.:format)  api/v1/sessions#new {:format=>:json}
              api_user_session POST   /api/v1/users/sign_in(.:format)  api/v1/sessions#create {:format=>:json}
      destroy_api_user_session DELETE /api/v1/users/sign_out(.:format) api/v1/sessions#destroy {:format=>:json}
  cancel_api_user_registration GET    /api/v1/users/cancel(.:format)   api/v1/registrations#cancel {:format=>:json}
     new_api_user_registration GET    /api/v1/users/sign_up(.:format)  api/v1/registrations#new {:format=>:json}
    edit_api_user_registration GET    /api/v1/users/edit(.:format)     api/v1/registrations#edit {:format=>:json}
         api_user_registration PATCH  /api/v1/users(.:format)          api/v1/registrations#update {:format=>:json}
                               PUT    /api/v1/users(.:format)          api/v1/registrations#update {:format=>:json}
                               DELETE /api/v1/users(.:format)          api/v1/registrations#destroy {:format=>:json}
                               POST   /api/v1/users(.:format)          api/v1/registrations#create {:format=>:json}
然而,当我尝试注册一个用户时,我得到了以下错误

ActionController::RoutingError:
   uninitialized constant Api::V1::RegistrationsController

为了将资源保持在
/api/v1/
路径下,并且仍然能够使用Desive的默认控制器,需要固定路由

不要使用
名称空间
,而是使用
范围

scope :api, defaults: { format: :json } do
  scope :v1 do
    devise_for :users
  end
end
这样,您甚至不必使用
as:'api'
来标识您的资源

                  Prefix Verb   URI Pattern                      Controller#Action
        new_user_session GET    /api/v1/users/sign_in(.:format)  devise/sessions#new {:format=>:json}
            user_session POST   /api/v1/users/sign_in(.:format)  devise/sessions#create {:format=>:json}
    destroy_user_session DELETE /api/v1/users/sign_out(.:format) devise/sessions#destroy {:format=>:json}
cancel_user_registration GET    /api/v1/users/cancel(.:format)   devise/registrations#cancel {:format=>:json}
   new_user_registration GET    /api/v1/users/sign_up(.:format)  devise/registrations#new {:format=>:json}
  edit_user_registration GET    /api/v1/users/edit(.:format)     devise/registrations#edit {:format=>:json}
       user_registration PATCH  /api/v1/users(.:format)          devise/registrations#update {:format=>:json}
                         PUT    /api/v1/users(.:format)          devise/registrations#update {:format=>:json}
                         DELETE /api/v1/users(.:format)          devise/registrations#destroy {:format=>:json}
                         POST   /api/v1/users(.:format)          devise/registrations#create {:format=>:json}

为了将资源保持在
/api/v1/
路径下,并且仍然能够使用Desive的默认控制器,需要固定路由

不要使用
名称空间
,而是使用
范围

scope :api, defaults: { format: :json } do
  scope :v1 do
    devise_for :users
  end
end
这样,您甚至不必使用
as:'api'
来标识您的资源

                  Prefix Verb   URI Pattern                      Controller#Action
        new_user_session GET    /api/v1/users/sign_in(.:format)  devise/sessions#new {:format=>:json}
            user_session POST   /api/v1/users/sign_in(.:format)  devise/sessions#create {:format=>:json}
    destroy_user_session DELETE /api/v1/users/sign_out(.:format) devise/sessions#destroy {:format=>:json}
cancel_user_registration GET    /api/v1/users/cancel(.:format)   devise/registrations#cancel {:format=>:json}
   new_user_registration GET    /api/v1/users/sign_up(.:format)  devise/registrations#new {:format=>:json}
  edit_user_registration GET    /api/v1/users/edit(.:format)     devise/registrations#edit {:format=>:json}
       user_registration PATCH  /api/v1/users(.:format)          devise/registrations#update {:format=>:json}
                         PUT    /api/v1/users(.:format)          devise/registrations#update {:format=>:json}
                         DELETE /api/v1/users(.:format)          devise/registrations#destroy {:format=>:json}
                         POST   /api/v1/users(.:format)          devise/registrations#create {:format=>:json}