4

У меня есть проект API Rails 5 для управления пользовательскими задачами, и у меня есть следующая ошибка, но не всегда для одного и того же контроллера и маршрута.ActionController :: RoutingError: неинициализированная константа Api :: V1 :: ApiController

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

Я расскажу вам немного о моем проекте, чтобы более подробно объяснить ошибку.

App Структура

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

+0

показать свое 'приложение/контроллеры/API/v1/api_controller.rb' file – Aleksey

ответ

3

Вы должны использовать право постоянной наследуя - ::Api::ApiController:

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

потому что в ином случае он ищет Api::V1::ApiController, но должен se арка для Api::ApiController

+0

My API Controller находится за пределами папки V1. –

+0

@carro Я на самом деле отредактировал ответ –

+0

Спасибо! Я попробовал ваш ответ, и он работает! –

3

Прямо сейчас у вас есть Api::ApiController.
Ваш app/controllers/api/v1/api_controller.rb отсутствует V1 в пространстве имен

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

UPDATE

Если ваш ApiController находится вне V1 папки, то вы должны сделать

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

My API Controller находится вне папки V1. –

+0

См. Мое обновление. – Aleksey

+0

Камон, это просто украдено из моего ответа :) –

Смежные вопросы