SimpleSchema无效密钥" _id required"

时间:2017-02-09 22:22:30

标签: meteor meteor-autoform simple-schema meteor-collection2

我使用了aldeed:autoform,aldeed:simple-schema,aldeed:collection2和mdg:validated-method,用于对集合进行插入。

这是AutoForm的临时代码:

<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的开发者控制台中收到了以下错误:

&#34; areas_agregar&#34;的SimpleSchema无效键背景: 阵列[1]     0:对象         名称:&#34; _id&#34;         输入:&#34;必需&#34;         值:null          proto :对象         长度:1          proto :数组[0]

就像错误显示一样,问我一个_id字段的值,但我在插入更新时,它没有任何意义。

知道可能出现什么问题吗?

1 个答案:

答案 0 :(得分:0)

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