0

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- 不清楚列表中的哪个元素导致错误 - 需要提出自定义方式通过元素位置或其他方式区分错误。

4

1 回答 1

0

得到了 Tim Nelson 的回复,他创建了一张票来解决这个问题:https ://github.com/lift/framework/issues/1587 ,里程碑 3.0-M2。这可能仍在讨论中,但看起来它可能会得到修复。

关于提升谷歌组的讨论:https ://groups.google.com/forum/#!msg/liftweb/gh2syNeGWyw/OC3y2TLWfAkJ 。

于 2014-06-24T13:34:54.357 回答