2016-05-08 21 views
5

私はRails 4.2.6アプリケーションで単純なapiエンドポイントを作成していますが、問題があります。Rails 4で定数APIコントローラを自動ロードできません

私はURLを打つ:http://lvh.me:9077/api/v1/grubsは、私は次のエラーが表示されます。ここ

Unable to autoload constant Api::V1::GrubsController, expected /Users/shakycode/code/grubs/app/controllers/api/v1/grubs_controller.rb to define it 

は、エンドポイントを定義し、私のroutes.rbをファイルです。ここで

namespace :api do 
    namespace :v1 do 
     resources :grubs, only: [:index] 
    end 
    end 

は私が同じ戦略を使用Railsの4.2.1のアプリがありますが、4.2.6で、私は」私のアプリ/コントローラ/ API/V1/grubs_controller.rb

class API::V1::GrubsController < ApplicationController 
    protect_from_forgery with: :null_session 
    before_action :destroy_session 

def destroy_session 
    request.session_options[:skip] = true 
end 

    def index 
    @grubs = Grub.all 
    respond_to do |format| 
     format.json { render json: @grubs} 
    end 
    end 
end 

ですこのエラーが発生するのは、私がAPIを引き出すときです。

ありがとうございます!

更新:

load_missing_constantactivesupport (4.2.6) lib/active_support/dependencies.rb 
490 
491 
492 
493 
494 
495 
496 
497 
498 
499 
500 
     if loading.include?(expanded) 
      raise "Circular dependency detected while autoloading constant #{qualified_name}" 
     else 
      require_or_load(expanded, qualified_name) 
      raise LoadError, "Unable to autoload constant #{qualified_name}, expected #{file_path} to define it" unless from_mod.const_defined?(const_name, false) 
      return from_mod.const_get(const_name) 
     end 
     elsif mod = autoload_module!(from_mod, const_name, qualified_name, path_suffix) 
     return mod 
     elsif (parent = from_mod.parent) && parent != from_mod && 

答えて

9

Railsは一般的にのみモジュールの最初の名前を大文字:ここでは、ブラウザでbetter_errorsを使用して生成される例外です。言い換えれば、Railsは名前空間Api::V1::GrubsControllerを期待していますが、それはAPI::V1::GrubsControllerと定義しています。そのApi::V1::GrubsControllerを探ししようとしているあなたのエラーで一方

+0

これ!それは '一定のApi :: V1 :: GrubsController、/Users/shakycode/code/grubs/app/controllers/api/v1/grubs_controller.rbを定義するために定数を自動ロードすることができません。 'grubs_controller.rb'は' API :: V1 :: GrubsController'を定義していますが、 'Api :: V1 :: GrubsController'は定義していないからです。 – fbelanger

2

あなたのクラス名は

class API::V1::GrubsController < ApplicationController 

です。あなたのクラスの名前をApiに変更してください。

+0

私はAPI対APIのその部分を見逃しました。 – nulltek

関連する問題