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/.

Другие вопросы по тегам