Не удалось автозагрузить константу при первой загрузке Rails - PullRequest
1 голос
/ 06 мая 2020

У меня есть Rails API, и после запуска сервера по первому запросу я получаю следующую ошибку:

Unable to autoload constant Api::V1::UsersController, expected /Users/user/Sites/project/api/app/controllers/api/v1/users_controller.rb to define it

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

Я использую Ruby 2.7.1 и Rails 5.1.7 только для приложения API.

У меня определены следующие маршруты:

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      # User Routes
      post 'create_user' => 'users#create'
      get 'get_user' => 'users#show'
      delete 'destroy_user' => 'users#destroy'
      put 'update_user' => 'users#update'

      # Login Route
      post 'login' => 'user_token#create'
    end
  end

end

Моя папка структура

project
   - app
     - controllers
       - api_controller.rb
       - application_controller.rb
       - Api
         - V1
           - users_controller.rb
     - models
       - user.rb

Пользовательский контроллер настроен так (я также пробовал встроенное Api::V1::UsersController наследование):

module Api
  module V1
    class UsersController < ApiController
      before_action :authenticate_user, only: [:show, :update, :destroy]

      def create
        @user = User.new(user_params)
        if @user.save
          render json: { status: 200, data: @user }, status: :ok
        else
          render json: { status: 422 }, status: :unprocessable_entity
        end
      end

      def show
        render json: { status: 200, data: current_user }, status: :ok
      end

      def update
        if current_user.update(user_params)
          render json: { status: 200, data: current_user }, status: :ok
        else
          render json: { status: 422 }, status: :unprocessable_entity
        end
      end

      def destroy
        if current_user.delete
          render json: { status: 200, data: {} }, status: :ok
        else
          render json: { status: 422 }, status: :unprocessable_entity
        end
      end

      private

      def user_params
        params.require(:user).permit(:email, :password, :password_confirmation, :first_name, :last_name)
      end

    end
  end
end

Контроллер Api выглядит так:

class ApiController < ActionController::API    
  include Knock::Authenticable  
end

Контроллер приложения, подобный этому:

class ApplicationController < ActionController::API  
end

Модель пользователя выглядит так:

class User < ApplicationRecord
  has_secure_password
end

Любая помощь будет принята с благодарностью, поскольку эта структура мне кажется правильной

...