简体   繁体   中英

Rails namespaced routes to wrong Controller

So I'm just beginning with RoR and figured I do a basic blog with API endpoints aswell. The problem is that my api requests seem to be routed to the wrong controller,

I have the following as my routes.rb

Blog::Application.routes.draw do

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

end

I also have controllers/api/v1/articles_controller.rb , which has the following content:

module API
  module V1    
    class ArticlesController < ApplicationController
      respond_to :json

      def index
        respond_with Article.all
      end

    end
  end
end

My logic says that when I hit http://localhost:3000/api/v1/articles , this should be the Controller to respond, however the actual Controller that responds is the one in the root of controllers ( controllers/articles_controller.rb ) and not the one in the /api/v1 path. When I remove the Controller that actually responds, I'll get uninitialized constant Api::V1::ArticlesController instead.

Even rake routes gives me the expected routes, however actually hitting those endpoints fails. Output of rake routes is the following:

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

The only similar question I found on SO is nested namespace route going to wrong controller however, there's no accepted answer there and it's been a year. Maybe another attempt will help resolve this issue

Your module is API , but Rails is looking for Api . Ruby's modules are case-sensitive.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM