Lift Record не проверяет элементы списка при вызове `validate` - ошибка или функция?
Когда validate
называется на 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
- непонятно, какой элемент в списке вызвал ошибку; - нужно придумать собственный способ дифференциации ошибок по положению элемента или иным образом.
1 ответ
Получил ответ от Тима Нельсона, который создал тикет для решения этой проблемы: https://github.com/lift/framework/issues/1587, milestone 3.0-M2. Это может все еще обсуждаться, но похоже, что это, вероятно, будет исправлено.
Обсуждение по лифтовой группе Google: https://groups.google.com/forum/.