【问题标题】:ActionController::RoutingError: uninitialized constant Api::V1::ApiControllerActionController::RoutingError: 未初始化的常量 Api::V1::ApiController
【发布时间】:2016-10-14 09:09:38
【问题描述】:

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

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

我向你描述一下我的项目以更详细地解释错误。

应用结构

路线

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 服务器出现此错误

【问题讨论】:

  • 显示你的app/controllers/api/v1/api_controller.rb文件

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


【解决方案1】:

您应该在继承时使用正确的常量 - ::Api::ApiController

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

因为否则它正在搜索Api::V1::ApiController,但应该搜索Api::ApiController

【讨论】:

  • 我的 API 控制器在 V1 文件夹之外。
  • @carro 始终确保您使用正确的常量 :)
【解决方案2】:

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

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

更新

如果您的ApiControllerV1 文件夹之外,那么您应该这样做

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

【讨论】:

  • 我的 API 控制器在 V1 文件夹之外。
  • camon,这是从我的回答中偷来的 :)
  • 不,是你偷的。我最初对这个问题写了评论,正准备回答。
  • 不打算进一步讨论这个问题。答案的编辑时间不言自明:)
  • 我只是当时还没有看到。我从来没有偷过任何答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2013-08-25
  • 2016-01-16
  • 2016-01-19
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多