2016-05-08 26 views
5

'da sabit API Denetleyicisi otomatik olarak yüklenemiyor Rails 4.2.6 uygulamasında basit bir api uç noktası oluşturuyorum ancak sorun yaşıyorum. Ben url isabet Rails 4

:

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

benim routes.rb dosya bitiş noktası tanımlıyor: http://lvh.me:9077/api/v1/grubs aşağıdaki hatayı alırsınız. İşte

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

benim app/kontrolörleri/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 

ben 4.2.6 Ben aynı stratejiyi kullanılan bir Raylar 4.2.1 app var, ama API'ye karşı çekmeye çalıştığımda bu hatayı yaşıyorum.

Şimdiden teşekkürler!

Güncelleme:

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 && 

cevap

9

Raylar genellikle sadece modülün ilk ismi istifade eder: Burada tarayıcıda better_errors kullanılarak yükseltilir istisna. Başka bir deyişle, Rails Api::V1::GrubsController ad alanını bekler, ancak siz onu API::V1::GrubsController olarak tanımlarsınız. onun Api::V1::GrubsController aramaya çalışırken yanlışlıkla oysa

+0

olarak değiştirin! Hatta 'Api :: V1 :: GrubsController'ı otomatik olarak yükleyemiyor, beklenen /Users/shakycode/code/grubs/app/controllers/api/v1/grubs_controller.rb bunu tanımlamak için. Çünkü 'grubs_controller.rb' bir API :: V1 :: GrubsController'ı tanımlamakta, ancak bir' Api :: V1 :: GrubsController' değil. – fbelanger

2

Sınıfınız adı

class API::V1::GrubsController < ApplicationController 

olduğunu. Sınıfınızdaki adı Api

+0

Anladım, API ile Api'deki o bölümü kaçırdım. – nulltek