LoadError无法自动加载常量(Rails Engine)

时间:2018-10-09 22:20:56

标签: ruby-on-rails ruby-on-rails-4 rubygems ruby-on-rails-5 rails-engines

每当我碰到Rails引擎暴露的端点(例如greet)时,我都会收到此错误。

错误:

"LoadError(Unable to autoload constant TestingController, 
expected /local_path/app/controllers/testing_controller.rb to define it): 
/Users/xxxxx/.rvm/gems/ruby-2.5.1/gems/activesupport-5.2.1/lib/active_support/
dependencies.rb:507:in `load_missing_constant'"

引擎:

我有一个引擎,其操作方法如下定义greet

# type: class
# path: app/controllers/testing_controller.rb
# file name: testing_controller.rb 
module Parent
  module Child
    class TestingController < ApplicationController
      def initialize
        @name = 'BOB'
      end

      def greet
        render json: {'hi': 'hi', 'name': @name}
      end
    end
  end
end

定义为

的路由
# type: route
# path: app/config/routes.rb
# file name: routes.rb 
Parent::Child::Engine.routes.draw do
  get 'greet', to: 'testing#greet', as: :greet
end

详细信息:

此引擎已安装到宝石ABC上,然后在名为Example的rails应用中使用。当我通过击中应用中的greet路线时 http://localhost:3000/greet是我第一次收到LoadError

但是,如果我刷新页面,它将呈现 json符合预期。 {"hi":"hi","name":"BOB"}

我们有development.rb(app / config / env /)具有如下定义的缓存和急切负载

config.cache_classes = false
config.eager_load = false

Ruby:2.5.1
Rails:5.2.1

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

该消息似乎来自以下期望:文件testing_controller.rb的根级中有一个TestingController类的定义,而您定义的类嵌套在Parent::Child::模块中。

我想如果您将testing_controller.rb文件放在以下路径中:app/controllers/parent/child/testing_controller.rb,该错误将消失。