Как определить вложенный документ в SimpleSchema Meteor с автозначением, не вставляя его в каждую вставку родительского документа?

Я пытаюсь определить схему для коллекции с вложенным документом, и родительские, и вложенные документы имеют поля автозначения, которые должны устанавливаться при вставках. Проблема в том, что когда я пытаюсь вставить новый родительский документ (без каких-либо вложенных документов), я получаю сообщение об ошибке, указывающее, что поля вложенного документа являются обязательными.

Вот полный код для воспроизведения проблемы:

main.js

ChatRooms = new Meteor.Collection("chatRooms");

schema_ChatRooms_ChatMesssage = new SimpleSchema({
    userId: {
        type: String,
        label: "User ID",
        autoValue: function() {
            if (this.isInsert) {
              if (! this.isFromTrustedCode) {
                return this.userId;
              }
            } else {
              this.unset();
            }},
        autoform: { omit: true }
    },
    content: {
        type: String,
        label: "Content",
        max: 1000,
        min: 1
    },
    creationDate: {
        type: Date,
        label: "Created On",
        autoValue: function() {
            if (!this.isSet) {
                return new Date();
            }
            else {
              this.unset();
            }},
        autoform: { omit: true }
    }
});

schema_ChatRoom = new SimpleSchema({
    name: {
        type: String,
        label: "Name",
        max: 50,
        min: 1
    },
    isPublic: {
        type: Boolean,
        label: "Public"
    },
    creationDate: {
        type: Date,
        label: "Created On",
        autoValue: function() {
            if (!this.isSet) {
                return new Date();
            }
            else {
              this.unset();
            }},
        autoform: { omit: true }
    },
    // Sub Documents
    chatMessages: {
        type: schema_ChatRooms_ChatMesssage,
        label: "Chat Messages",
        optional: true,
        autoform: { omit: true }
    }
});

ChatRooms.attachSchema(schema_ChatRoom);

if (Meteor.isClient) {
    AutoForm.addHooks(null, {
        onError: function(operation, error, template) {
                    alert(operation.toString() + " : " + error.toString());
                }
    });
} 

main.html

<head>
  <title>TestSubDoc</title>
</head>

<body>
  <h1>Create</h1>

  {{> quickForm collection="ChatRooms" id="chatRooms_create_form" type="insert"}}
</body>

Я попытался добавить «необязательный: true» в «chatMessages», но это не помогло. Кажется, что даже когда вложенный документ не включен, автозначение вложенного документа все еще выполняется и создает новый вложенный документ с сгенерированными значениями.

Что я могу сделать, чтобы правильно создать документ с вложенными документами, которые имеют автоматические значения?


person Moti osmo    schedule 23.10.2014    source источник


Ответы (1)


Возможно, вам нужно сделать все поля из schema_ChatRooms_ChatMesssage необязательными и опущенными автоформой.

person MatiK    schedule 12.06.2015