Почему попытка использовать 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?

Ответы на вопрос(1)

Ваш ответ на вопрос