Toshi Toshi - 2 months ago 19
Ruby Question

Unable to autoload constant Api::V1::UsersController

I've been developing API, but when I access the endpoint

Unable to autoload constant Api::V1::UsersController, expected /Users/toshikiinami/Desktop/billing/app/controllers/api/v1/users_controller.rb to define it
comes out.


  • I use rails 4.2.3



Any ideas to configure the subdomain endpoint properly?

config/routes.rb


Rails.application.routes.draw do
namespace :api, defaults: { format: :json }, constraints: { subdomain: 'api' }, path: '/' do
scope module: :v1 do
resources :users, only: [:index]
end
end
end


controllers/api/v1/users_controller.rb


class UsersController < ActionController::Base
def index
render 'test' => 'json'
end
end


/etc/hosts


##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
127.0.0.1 api.localhost.local

Answer

The problem is as stated:

controllers/api/v1/users_controller.rb defines UsersController class, not Api::V1::UsersController.

The solution looks as follows:

#controllers/api/v1/users_controller.rb
module Api
  module V1
    class UsersController < ActionController::Base
      def index
        render json: { test: 'test' }, status: :ok
      end
    end
  end
end