我希望有人解释一下为什么在 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
与上面相同
then 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
and config/application.rb
与上面相同
然后一切正常。
我的问题是为什么我不需要在里面指定模块v1/root.rb
还有里面v1/users
以及为什么我不需要使用API::Root => '/'
in config/routes.rb
?