5

我已经提到了这个链接

创建我自己的 api 但面临路由错误,因为这是我第一次使用命名空间。

这是我的控制器

class API::IndexController < ApplicationController
  def index
    @clients = Client.all
    respond_to do |format|
        format.json
    end
  end
end

我的路线有

  namespace :api do
    resources :index
  end

这是我的转折点.rb

ActiveSupport::Inflector.inflections(:en) do |inflect|
    inflect.acronym 'API'
end

完成后,我尝试了 localhost:3000/api/index.json 但抛出错误为

    Routing Error
uninitialized constant API

任何人都可以帮忙。

4

5 回答 5

9

即使这个问题很老...

我遇到了同样的问题,我的解决方案是将 api 文件夹(在 app/controllers 和 app/views 中)从“API”(全大写)重命名为“api”(全部小写)

希望这可以帮助

于 2014-04-17T07:59:41.997 回答
5

您的类中的名称必须与命名空间相同。尝试这个:

class Api::IndexController < ApplicationController
  def index
    @clients = Client.all
    respond_to do |format|
        format.json
    end
  end
end

路线:

  namespace :api do
    resources :index
  end
于 2014-10-31T09:49:46.963 回答
0

要解决此问题,请添加以下文件

#./spec/support/api/helper.rb

module ApiHelper
  include Rack::Test::Methods

  def app
    Rails.application
  end
end

RSpec.configure do |c|
  c.include ApiHelper, :type => :api
end

然后将其包含在spec_helper.rb

目录[Rails.root.join("spec/support/**/*.rb")].each {|f| 要求 f}

阅读https://gist.github.com/alex-zige/5795358了解更多信息。

于 2014-10-31T09:45:04.463 回答
0

如果您为IndexControlleras定义名称空间,API那么在您的中routes.rb它应该写为

  namespace :a_p_i do
    resources :index
  end

否则,如果您想使用您在路由文件中编写的内容,只需将IndexController表单的命名空间更改APIApi. 例如:Api::IndexController

于 2013-10-26T11:40:06.263 回答
0

这是一个有点老的问题,但我的经验仍然很有用。我发现我的问题是由于文件名中的拼写错误,我有一个名为的类ApiFooController并且文件被命名api_foo_contoller.rb(注意文件名中缺少'n')。所以看来这个错误归结为一个普遍的问题,正确地遵循命名约定是失败的。

我的猜测是控制器可能被放置在controller/path 而不是controller/api并且命名空间应该是Api,而不是API(不确定添加API为 anAcronym是否有效,我从未尝试过。

于 2017-08-02T15:26:58.490 回答