无法在Rails 4中自动加载常量API控制器

nul*_*tek 11 api-design ruby-on-rails ruby-on-rails-4

我正在我的Rails 4.2.6应用程序中创建一个简单的api端点,但我遇到了问题.

当我点击网址:http://lvh.me:9077 / api/v1/gres我收到以下错误:

Unable to autoload constant Api::V1::GrubsController, expected /Users/shakycode/code/grubs/app/controllers/api/v1/grubs_controller.rb to define it
Run Code Online (Sandbox Code Playgroud)

这是我的routes.rb文件定义端点.

namespace :api do
    namespace :v1 do
      resources :grubs, only: [:index]
    end
  end
Run Code Online (Sandbox Code Playgroud)

这是我的app/controllers/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
Run Code Online (Sandbox Code Playgroud)

我有一个Rails 4.2.1应用程序,我使用相同的策略,但在4.2.6我发生这种错误时,我试图拉动API.

提前致谢!

更新:这是在浏览器中使用better_errors引发的异常:

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 &&
Run Code Online (Sandbox Code Playgroud)

Ant*_*y E 17

Rails通常只会将模块的名字大写.换句话说,Rails期望命名空间Api::V1::GrubsController,但你将它定义为API::V1::GrubsController.


小智 5

你的班级名称是

class API::V1::GrubsController < ApplicationController
Run Code Online (Sandbox Code Playgroud)

而在您的错误中,它试图寻找Api::V1::GrubsController. 将班级中的名称更改为Api