Rails传递布尔值false至JSON Schema时的验证异常问题
Rails中JSON Schema验证布尔值false时的问题
问题现象
- 使用activerecord_json_validator进行JSON Schema验证时,布尔值
true可正常通过验证,但false会被判定为缺失必填项 - 启用模型验证规则
validates :column, inclusion: {in: [true, false] }后,传递false会触发报错:Validation failed: value1 is not included in the list, value2 is not included in the list - 控制台直接赋值
false测试同样失败,错误提示:["Dynamic attributes object at root is missing required properties: bladder_compatible, bladder_included"]
环境与背景
- 应用通过activerecord_json_validator读取CSV文件数据并做JSON Schema验证,CSV中的布尔值以字符串"true"/"false"形式传递,已实现类型转换逻辑
- 当前使用的布尔值转换方法:
def convert_to_bool(value) return true if value == true || value.to_s.downcase == 'true' return false if value == false || value.to_s.downcase == 'false' value end
- 日志显示转换逻辑已成功将字符串"true"/"false"转为布尔值
true/false,但JSON Schema验证仍提示缺少必填项 - 使用的JSON Schema定义:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "bladder_compatible": { "type": "boolean" }, "bladder_included": { "type": "boolean" }, "bladder_volume_l": { "type": "number", "minimum": 1.5, "maximum": 3 } }, "required": ["bladder_compatible", "bladder_included"] }
- 该Schema在其他验证器及activerecord_json_validator依赖的json schemer中测试均正常
控制台测试代码
b = BagContainer.new b.dynamic_attributes = {bladder_compatible: false, bladder_included: false, bladder_volume_l: 2} b.valid? # 验证失败,执行b.errors.full_messages返回: # ["Dynamic attributes object at root is missing required properties: bladder_compatible, bladder_included"]
内容的提问来源于stack exchange,提问作者dukehenry
相关产品推荐
相关产品推荐

