未找到鉴别器键对应类时Mongoid行为与官方文档不符咨询
问题原因
你遇到的表现和文档描述不一致的核心原因是版本不匹配:
- 你查阅的是Mongoid 7.3版本的官方文档,「鉴别器值无法映射到子类时返回父类实例」是7.3版本才新增的特性
- 从报错堆栈可以看出你当前使用的是Mongoid 7.2.5,该版本对无法识别的
_type值默认直接抛出Mongoid::Errors::UnknownModel错误,和你实际遇到的现象完全一致。
解决方案
你可以根据需求选择以下任意一种方案处理:
- 升级Mongoid版本到7.3及以上:升级后你的查询语句就会符合文档描述的逻辑,直接返回Canvas实例,不会抛出异常
- 7.2版本临时跳过类型校验:查询时调用
skip_type_cast方法即可忽略_type字段的映射逻辑,直接实例化为当前调用类:
Canvas.skip_type_cast.find_by(id: '612d5bd10170cb02ad9bfbac')
- 7.3+版本全局关闭类型映射校验(不推荐):如果你的业务场景经常存在
_type值不对应模型的情况,可以在Mongoid初始化配置中添加如下配置,全局关闭未知模型的报错:
Mongoid::Config.raise_on_unknown_type = false
注意:全局配置会作用于所有继承场景,可能会掩盖实际的模型定义错误,建议优先使用前两种方案。
内容的提问来源于stack exchange,提问作者bappelt
相关产品推荐
相关产品推荐

