Недопустимые ключи 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
Другие вопросы по тегам