2016-10-14 60 views
4

ユーザータスクを制御するためのRails 5 APIプロジェクトがありますが、次のエラーがありますが、必ずしも同じコントローラとルートではありません。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 

私はログインルートを実行し、タスクの後にルートを実行すると、最後のルートとチームモジュール内のすべてのルートでエラーが発生します。私がプロジェクトを変更して保存すると(空白スペースが1つしかない)、タスクルートを実行してログインルートを実行した後、最後のルートとログインモジュールのすべてのルートにエラーが発生します。

また、このエラーがいかなる意味を持っていない...

Railsのサーバー enter image description here enter image description here

+0

を行う必要があり、名前空間でV1

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

UPDATE

が欠落している、あなたの 'アプリ/コントローラ/ API/V1を表示/ api_controller.rb'ファイル – Aleksey

答えて

3

継承しながら、あなたは右の定数を使用する必要があります - ::Api::ApiControllerを:

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

それ以外の場合はApi::V1::ApiControllerを検索していますが、アーチApi::ApiController

+0

APIコントローラがV1フォルダの外にあります。 –

+0

@carro私は実際に答えを編集しました –

+0

ありがとうございました!私はあなたの答えを試して、それは動作します! –

3

今すぐあなたはApi::ApiControllerを持っています。
あなたapp/controllers/api/v1/api_controller.rbは、あなたのApiControllerV1フォルダであれば、あなたは

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

APIコントローラはV1フォルダの外にあります。 –

+0

私の更新を見てください。 – Aleksey

+0

カモン、これは私の答えからちょうど盗まれています:) –

関連する問題