You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby报错NameError:未初始化常量,跨模块调用类问题

问题原因
  • Ruby(尤其是依赖自动加载的框架如Rails)的自动加载机制严格遵循文件名与常量名的对应规则:
    • people.rb对应People模块,加载该文件时会初始化People模块,同时加载文件内的HobbyValueObject,因此这个类能被正常找到。
    • CityValueObject定义在job.rb中,文件名job.rb和常量名People::CityValueObject完全不匹配,自动加载器无法关联到该文件,所以找不到这个常量。
  • 你未显式声明require语句,自动加载器只会根据已加载的模块/类去匹配对应蛇形命名的文件,不会主动扫描目录下所有文件。
解决方法
  • 遵循命名约定(推荐):将CityValueObject移到符合规则的文件中。如果是People模块下的类,应放在PackA/people/city_value_object.rb(对应People::CityValueObject),确保文件名是类名的驼峰转蛇形格式,且模块层级对应目录结构。
  • 显式加载依赖:在people.rb末尾添加require_relative 'job',这样当People模块被加载时,会自动加载同目录下的job.rb,CityValueObject就会被注册到People模块下。
  • 检查自动加载路径:如果是Rails项目,确认config.autoload_paths配置包含PackA目录,同时确保文件与常量的映射关系完全符合约定。

内容的提问来源于stack exchange,提问作者Quick-gun Morgan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:55:38