Create API in Rails 4 - Uninitialized Api :: V1 :: UsersController Constant

For a personal project, I would like to create a Restful web service in Rails 4.

So, I created my first project using rails-api and add the following code:

routes.rb in MyProject> config

 MyProject::Application.routes.draw do namespace :api, defaults: {format: 'json'} do namespace :v1 do resources :users end end end 

users_controller.rb in MyProject> app> controller> api> v1> user directory

 module Api module V1 class UsersController < ApplicationController def index end def create end def show end def update end def delete end end end end 

When I start the rails server with the rails s command line and go to this url: http://localhost:3000/api/v1/users/show I have this error:

uninitialized constant Api :: V1 :: UsersController

Rails.root: / Users / Jean / Development / MyProject

Application Trace | Frame Track | Active Actions Full Trace (4.0.4) lib / active_support / inflector / methods.rb: 228: in const_get' activesupport (4.0.4) lib/active_support/inflector/methods.rb:228:in block in constantize' activesupport (4.0 .4) lib / active_support / inflector / methods.rb: 224: in each' activesupport (4.0.4) lib/active_support/inflector/methods.rb:224:in inject' activesupport (4.0.4) lib / active_support / inflector /methods.rb: 224: in constantize' actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:76:in controller_reference "actionpack (4.0.4) lib / action_dispatch / routing / route_set.rb: 66: in controller' actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:44:in call' actionpack (4.0.4) lib / action_dispatch / travel / router.rb: 71: in block in call' actionpack (4.0.4) lib/action_dispatch/journey/router.rb:59:in each 'actionpack (4.0.4) lib / action_dispatch / travel / router.rb: 59: in call' actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:674:in call 'rack (1.5.2) lib / ra ck / etag.rb: 23: in call' rack (1.5.2) lib/rack/conditionalget.rb:25:in call' rack (1.5. 2) lib / rack / head.rb: 11: in call' actionpack (4.0.4) lib/action_dispatch/middleware/params_parser.rb:27:in call' activerecord (4.0.4) lib / active_record / query_cache.rb: 36: in call' activerecord (4.0.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in call' activerecord (4.0.4) lib / active_record / migration.rb: 373: in call' actionpack (4.0.4) lib/action_dispatch/middleware/callbacks.rb:29:in block in the call 'activesupport (4.0.4) lib / active_support / callbacks.rb: 373: in _run__4323212420903942114__call__callbacks' activesupport (4.0.4) lib/active_support/callbacks.rb:80:in run 'actionpack (4.0.4) lib / action_dispatch / middleware / callbacks.rb: 27: in call' actionpack (4.0.4) lib/action_dispatch/middleware/reloader.rb:64:in call ' actionpack (4.0.4) lib / action_dispatch / middleware / remote_ip.rb: 76: in call' actionpack (4.0.4) lib/action_dispatch/middleware/debug_exceptions.rb:17:in call' actionpack (4.0.4) lib / action_dispatch / middleware / show_exceptio ns.rb: 30: in call' railties (4.0.4) lib/rails/rack/logger.rb:38:in ranks call_app' (4.0.4) lib / rails / rack / logger.rb: 20: in block in call' activesupport (4.0.4) lib/active_support/tagged_logging.rb:68:in block in tagged' activesupport (4.0.4) lib / active_support / tagged_logging.rb: 26: in tagged' activesupport (4.0.4) lib/active_support/tagged_logging.rb:68:in tagged 'railties (4.0.4) lib / rails / rack / logger.rb: 20: in call' actionpack (4.0.4) lib/action_dispatch/middleware/request_id.rb:21:in call 'rack (1.5.2) lib / rack / runtime.rb: 17: in call' activesupport (4.0.4) lib/active_support/cache/strategy/local_cache.rb:83:in call 'rack (1.5. 2) lib / rack / lock.rb: 17: in call' actionpack (4.0.4) lib/action_dispatch/middleware/static.rb:64:in call' railties (4.0.4) lib / rails / engine.rb: 511: in call' railties (4.0.4) lib/rails/application.rb:97:in call' rack (1.5.2) lib / rack / lock.rb: 17: in call' rack (1.5.2) lib/rack/content_length.rb:14:in call 'rack (1.5.2) lib / rack / handler / webrick.rb: 60: in service' /Users/Jean/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:138:in (UserUsers/Jean/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:138:in ruby-2.1.2 / lib / ruby ​​/ 2.1.0 / webrick / httpserver.rb: 94: in run' /Users/Jean/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/server.rb:295:in block in start_thread '

I found many posts in Stackoverflow with the same error, but the answers did not help me solve my problem.

Thanks!

+7
api ruby-on-rails web-services ruby-on-rails-4 routes
source share
1 answer

if you have this way:

MyProject> application> controllers> api> v1> users

Controller

should be class Api::V1::Users::UsersController if this:

MyProject> application> controllers> api> v1> users_controller.rb

then class Api::V1::UsersController

For the abbreviation name API::V1::UsersController instead of Api::V1::Users::UsersController use inflectors:

in config/initializers/inflections.rb

  ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'API' end 
+14
source share

All Articles