当validate
在 a上调用时Record
,它会递归地调用validate
每个字段。但是,如果一个字段是一个列表,BsonRecordListField
那么默认情况下它没有任何validations
注册,这会导致validate
从父范围调用列表的元素时不会被验证。
validations
覆盖列表字段以映射所有元素以获得真正完整的验证并不难。我想知道这种行为是设计使然还是错误?对我来说,验证所有字段及其元素(在这种情况下为列表元素)似乎更自然。
例如,覆盖可能如下所示:
object listOfThings extends BsonRecordListField(this, SomeBsonMetaRecord) {
override def validations = ((elems: ValueType) => elems.map(_.validate).flatten) :: super.validations
}
问题是您必须记住为所有基于列表的字段执行此操作。
我只是猜测由于flatten
那里的存在而将实现留给用户,即多个元素可能存在多个错误但相同FieldIdentifier
- 不清楚列表中的哪个元素导致错误 - 需要提出自定义方式通过元素位置或其他方式区分错误。