Почему попытка использовать Grape с Rails терпит неудачу с «неинициализированным постоянным API»?
Я хотел бы, чтобы кто-то объяснил, почему это происходит в Rails (4.1.8) с Grape (0.10.1)
так что это мой API:
app/api/root.rb
:
module API
class Root < Grape::API
prefix 'api'
mount API::V1::Root
end
end
app/api/v1/root.rb
:
module API::V1
class Root < Grape::API
version 'v1'
mount API::V1::Users
end
end
app/api/v1/users.rb
:
module API::V1
class Users < Grape::API
format 'json'
resource :users do
desc "Return list of users"
get '/' do
User.all
end
end
end
end
config/routes.rb
:
Rails.application.routes.draw do
mount API::Root => '/'
end
и в моемapplication.rb
Я добавил:
config.paths.add "app/api", glob: "**/*.rb"
config.autoload_paths += Dir["#{Rails.root}/app/api/*"]
и в этом случае я получаю ошибку:NameError: uninitialized constant API
но если мой код выглядит так:
app/api/root.rb
так же, как и выше
затемapp/api/v1/root.rb
:
class Root < Grape::API
version 'v1'
mount Users
end
app/api/v1/users.rb
:
class Users < Grape::API
format 'json'
resource :users do
desc "Return list of users"
get '/' do
User.all
end
end
end
config/routes.rb
:
Rails.application.routes.draw do
mount Root => '/'
end
а такжеconfig/application.rb
так же, как и выше
Тогда все работает нормально.
Мой вопрос: почему мне не нужно указывать модули внутриv1/root.rb
а также внутриv1/users
а также почему мне не нужно использоватьAPI::Root => '/'
вconfig/routes.rb
?