У меня есть 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
Любая помощь будет принята с благодарностью, поскольку эта структура мне кажется правильной