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

Rails 6.0.5.1中ActiveRecord inclusion验证的errors.added?断言失败问题

Rails 6.0.5.1中ActiveRecord inclusion验证的断言问题解决方法

问题场景

在Rails 6.0.5.1版本的ActiveRecord模型中,配置了如下inclusion验证:

validates :car_type, inclusion: ['coupe', 'sedan', 'convertible']

测试阶段,给car_type属性赋值不在有效列表中的值(如'airplane')时,以下MiniTest断言均可正常通过:

assert car.errors.invalid?
assert car.errors.include? :car_type
assert car.errors.added? :car_type, 'is not included in the list'

但执行assert car.errors.added? :car_type, :inclusion时断言失败,报错Minitest::Assertion: Expected false to be truthy。

解决方案

原因分析

Rails 6.0.x版本中,errors.added?方法在通过符号匹配错误类型时,会严格校验验证选项的一致性。仅传入:inclusion符号而不附带对应验证选项的话,无法匹配到已添加的错误记录。另外,inclusion验证底层实际是使用:in作为错误标识的符号键。

两种可行写法

  1. 传入完整验证选项哈希,与模型中配置的验证参数保持一致:
assert car.errors.added? :car_type, :inclusion, in: ['coupe', 'sedan', 'convertible']
  1. 直接使用底层错误符号:in:
assert car.errors.added? :car_type, :in

内容的提问来源于stack exchange,提问作者Jon Schneider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:30:52