Rails命名空间路由到错误的Controller

时间:2013-05-28 17:34:54

标签: ruby-on-rails ruby-on-rails-3.2

所以我刚刚开始使用RoR并且认为我做了一个带有API端点的基本博客。问题是我的api请求似乎被路由到错误的控制器,

我有以下作为我的routes.rb

Blog::Application.routes.draw do

  namespace :api do
    namespace :v1 do
      resources :articles
    end
  end

end

我还有controllers/api/v1/articles_controller.rb,其中包含以下内容:

module API
  module V1    
    class ArticlesController < ApplicationController
      respond_to :json

      def index
        respond_with Article.all
      end

    end
  end
end

我的逻辑说当我点击http://localhost:3000/api/v1/articles时,这应该是要响应的控制器,但是响应的实际控制器是控制器根目录中的控制器(controllers/articles_controller.rb)而不是控制器中的控制器。 /api/v1路径。当我删除实际响应的Controller时,我会改为uninitialized constant Api::V1::ArticlesController

即使rake routes给了我预期的路由,但实际上击中这些端点失败了。 rake routes的输出如下:

api_v1_articles GET    /api/v1/articles(.:format)          api/v1/articles#index
                    POST   /api/v1/articles(.:format)          api/v1/articles#create
 new_api_v1_article GET    /api/v1/articles/new(.:format)      api/v1/articles#new
edit_api_v1_article GET    /api/v1/articles/:id/edit(.:format) api/v1/articles#edit
     api_v1_article GET    /api/v1/articles/:id(.:format)      api/v1/articles#show
                    PUT    /api/v1/articles/:id(.:format)      api/v1/articles#update
                    DELETE /api/v1/articles/:id(.:format)      api/v1/articles#destroy

我在SO上发现的唯一类似问题是nested namespace route going to wrong controller但是,那里没有接受的答案,而且已经过了一年。也许另一次尝试将有助于解决这个问题

1 个答案:

答案 0 :(得分:3)

您的模块是API,但Rails正在寻找Api。 Ruby的模块区分大小写。