LoadError 无法自动加载常量(Rails 引擎)
LoadError Unable to autoload constant ( Rails Engine )
每当我到达 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
详情:
此引擎已安装到 gem 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
非常感谢您的帮助。
该消息似乎来自预期,在文件的根级别 testing_controller.rb
有一个 TestingController
class 的定义,而你有 class 定义嵌套在 Parent::Child::
个模块中。
我想如果您将 testing_controller.rb
文件放在以下路径中:app/controllers/parent/child/testing_controller.rb
错误就会消失。
每当我到达 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
详情:
此引擎已安装到 gem 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
非常感谢您的帮助。
该消息似乎来自预期,在文件的根级别 testing_controller.rb
有一个 TestingController
class 的定义,而你有 class 定义嵌套在 Parent::Child::
个模块中。
我想如果您将 testing_controller.rb
文件放在以下路径中:app/controllers/parent/child/testing_controller.rb
错误就会消失。