ActionController :: RoutingError:未初始化的常量Api :: V1 :: ApiController

时间:2016-10-14 09:09:38

标签: ruby-on-rails ruby ruby-on-rails-5 rails-routing rails-api

我有用于控制用户任务的Rails 5 API项目,我有以下错误,但并不总是针对相同的控制器和路由。

ActionController::RoutingError: uninitialized constant Api::V1::ApiController

我向您描述了一些我的项目,以更详细地解释错误。

应用结构

enter image description here

路线

scope module: 'api' do
  namespace :v1 do

    # => Login routes
    scope module: 'login' do
      match 'login', to: 'sessions#login', as: 'login', via: :post
    end

    # => Team routes
    scope module: 'team' do

      # => no admin routes
      resources :tasks, except: [:index] do
        collection do
          match ':view', to: 'tasks#index', as: 'tasks', via: [:get, :post]
        end
      end
    end

  end
end

API控制器

module Api
  class ApiController < ApplicationController

    def respond_with_errors(object)
      render json: {errors: ErrorSerializer.serialize(object)}, status: :unprocessable_entity
    end

  end
end

团队控制器

module Api::V1
  class Team::TeamController < ApiController

任务控制器

module Api::V1
  class Team::TasksController < Team::TeamController

登录控制器

module Api::V1
  class Login::LoginController < ApiController

会话控制器

module Api::V1
  class Login::SessionsController < Login::LoginController

当我执行登录路线和任务路线后,我在最后一条路线和团队模块中的所有路线中得到错误。如果我更改项目并保存它(只有一个空格)然后我执行任务路由和登录路由后,我得到最后路由中的错误和登录模块中的所有路由。

没有任何意义......

Rails服务器出现此错误 enter image description here enter image description here

2 个答案:

答案 0 :(得分:5)

在继承 - ::Api::ApiController

时,您应该使用正确的常量
module Api::V1
  class Team::TeamController < ::Api::ApiController

因为否则会搜索Api::V1::ApiController,但应搜索Api::ApiController

答案 1 :(得分:3)

现在你有Api::ApiController 您的app/controllers/api/v1/api_controller.rb在名称空间中缺少V1

module Api::V1
  class ApiController < ApplicationController
    ..
  end
end

<强>更新

如果您的ApiController位于V1文件夹之外,那么您应该

module Api::V1
  class Team::TeamController < ::Api::ApiController