Валидатор уникальности по нескольким атрибутам является кастомным валидатором, который проверяет уникальность настраиваемого объекта в хранилище данных по нескольким атрибутам. Проверяемым атрибутом автоматически становится тот атрибут, для которого настраивается валидатор, а так же все указанные связанные поля.
Валидатор имеет уникальное наименование unique-attributes
. Для указания в кастомном валидаторе используется uniqueAttributes
.
Настройка валидации в аддоне ember-flexberry
версий 3.x.x осуществляется при помощи аддона ember-cp-validations (для версий 2.x.x используется аддон ember-validations). Он не только предоставляет определенный набор готовых валидаторов, но и также позволяет писать кастомные.
Пример настройки валидации уникальности для двух полей text+date в модели ember-flexberry-dummy-suggestion тестового стенда:
Свойства валидатора:
- modelName: Имя модели, в которой будут проверяться атрибуты;
- view: Представление, по которому будет происходить проверка наличия объекта в хранилище;
- secondProperty: Дополнительное свойство для проверки уникальности;
- message: Сообщение валидации;
- debounce: Задержка в миллисекундах между повторными проверками. Это необходимо, когда есть текстовое поле и пользователь быстро вводит текст. Чтобы не перегружать и не отправлялось множество запросов к хранилищу данных, необходимо указать задержку для проверки валидации.
Если не указывать атрибут modelName
, то он автоматически установится в имя модели текущего проверяемого объекта.
Указание modelName
добавлено с целью возможности проверять наличие уникальности комбинации полей в другом объекте, отличном от того что редактируется на текущей форме.
Для срабатывания валидатора в примере на тестовом стенде, необходимо добавить строку в таблицу suggestion с необходимыми данными:
INSERT INTO public.suggestion(
primarykey,
createtime, creator, edittime, editor,
address, text,
date, votes, moderated,
type,
author,
editor1)
VALUES ('87fe604d-92cd-4cce-896b-e3d62ab566da',
NULL, NULL, NULL, NULL,
'addr', '12345',
TO_DATE('20230703','YYYYMMDD'), 0, false,
'1a5a5fcb-2ad1-4554-8fbc-cd33e51308da',
'01c157a0-aa74-411d-96d3-8f877dbab853',
'01c157a0-aa74-411d-96d3-8f877dbab853');
Когда поменяем текст или дату в нашем примере на те, что нет в хранилище данных, то сообщение валидации исчезает:
Для проверки значений полей на уникальность используются стандартные возможности хранилища данных.
Пример:
Вот почему для работы этого валидатора не требуется дополнительных доработок со стороны бекенда.