Недопустимые ключи SimpleSchema "_id required"
Я использую aldeed:autoform, aldeed:simple-schema, aldeed:collection2 и mdg:validated-method для вставки в коллекцию.
Это шаблон с автоформой:
<template name="Areas_agregar">
{{> Titulos_modulos title="Areas" subtitle="Agregar" cerrar=true}}
{{
#autoForm
collection=areasColecction
id="areas_agregar"
type="method"
meteormethod="areas.insert"
}}
{{> afQuickField name='nombre'}}
{{> afArrayField name='subareas'}}
<button type="submit">Save</button>
<button type="reset">Reset Form</button>
{{/autoForm}}
</template>
Это схема коллекции:
Areas.schema = new SimpleSchema({
_id: {
type: String,
regEx: SimpleSchema.RegEx.Id
},
nombre: {
type: String,
label: 'Nombre'
},
subareas: {
type: [String],
label: 'Subareas'
}
});
И это метод вставки:
const AREA_FIELDS_ONLY = Areas.simpleSchema().pick(['nombre', 'subareas', 'subareas.$']).validator({ clean: true, filter: false });
export const insert = new ValidatedMethod({
name: 'areas.insert',
validate: AREA_FIELDS_ONLY,
run({ nombre, subareas }) {
const area = {
nombre,
subareas
};
Areas.insert(area);
},
});
И я получаю следующую ошибку в консоли разработчика Chrome:
Недопустимые ключи SimpleSchema для контекста "area_agregar": Array[1] 0: Имя объекта : "_id" тип: "required" значение: null proto: Длина объекта: 1 proto: Array [0]
Как показывает ошибка, запрашивается значение поля _id, но я на обновлении вставки, это не имеет никакого смысла.
Есть идеи, что может пойти не так?
1 ответ
autoform обрабатывает требуемые ключи в схеме как необходимые при вводе формы, которые не работают для _id
ключ.
Если вы сделаете _id необязательным: true, ваша вставка будет работать, и Meteor автоматически вставит _id
ИЛИ вы можете использовать вариацию схемы для автоформы, которая пропускает _id
ключ в целом:
let schemaObject = {
nombre: {
type: String,
label: 'Nombre'
},
subareas: {
type: [String],
label: 'Subareas'
}
};
Areas.formSchema = new SimpleSchema(schemaObject); // use for form
schemaObject._id = {
type: String,
regEx: SimpleSchema.RegEx.Id
};
Areas.collectionSchema = new SimpleSchema(schemaObject); // use for collection