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

怎甘沉沦 提交于 2019-12-22 05:32:26

问题


I have Rails 5 API project for controlling user tasks and I have the following error but not always for the same controller and route.

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

I describe you a little bit my project to explain in more detail the error.

App structure

Routes

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 Controller

module Api
  class ApiController < ApplicationController

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

  end
end

Team Controller

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

Tasks Controller

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

Login Controller

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

Sessions Controller

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

When I execute login route and after tasks route, I get the error in last route and all the routes in team module. If I change the project and save it (only one blank space) and then I execute tasks route and after login route, I get the error in last route and all the routes in login module.

It doesn't have any sense...

Rails server in this errors


回答1:


You should be using the right constant while inheriting - ::Api::ApiController:

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

because otherwise it is searching for Api::V1::ApiController, but should search for Api::ApiController




回答2:


Right now you have Api::ApiController.
Your app/controllers/api/v1/api_controller.rb is missing V1 in namespace

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

UPDATE

If your ApiController is outside V1 folder then you should do

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


来源:https://stackoverflow.com/questions/40039279/actioncontrollerroutingerror-uninitialized-constant-apiv1apicontroller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!