2017-02-09 175 views
0

我正在使用aldeed:autoform,aldeed:simple-schema,aldeed:collection2和mdg:validated-method用於對集合執行插入操作。SimpleSchema無效密鑰「_id required」

這是自動窗體的tempalte:

<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的開發控制檯中出現以下錯誤:

間爲 「areas_agregar」 上下文

SimpleSchema無效的鍵: 陣列[1] 0:對象 名: 「_id」 類型: 「必需的」 值:空 :對象 長度:1 原型:Array [0]

就像錯誤顯示,問我爲_id字段的值,但我在插入更新,它沒有任何意義。

任何想法可能會出錯?

+0

如果你使'_id''可選:true',那麼你的插入將工作,流星會自動插入'_id' –

+0

是的!這工作。但是爲什麼在'todos'示例項目中,'_id'字段中沒有'_id optional:true'? –

+0

該項目是否使用autoform? –

回答

0

autoform將模式中所需的密鑰視爲在輸入中不需要的密鑰,該密鑰不適用於_id密鑰。

如果使_id可選:true,那麼您的插入會工作和流星會自動插入_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 
+0

謝謝米歇爾。這是一個非常優雅的解決方案。 –