サブ ドキュメントを含むコレクションのスキーマを定義しようとしています。親ドキュメントとサブ ドキュメントの両方に、挿入時に設定する必要がある自動値フィールドがあります。問題は、新しい親文書 (サブ文書なし) を挿入しようとすると、サブ文書フィールドが必要であるというエラーが表示されることです。
問題を再現するための完全なコードは次のとおりです。
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>
「chatMessages」に「optional: true」を追加してみましたが、解決しませんでした。サブドキュメントが含まれていない場合でも、サブドキュメントの自動値が実行され、生成された値で新しいサブドキュメントが作成されるようです。
自動値を持つサブドキュメントを含むドキュメントを適切に作成するにはどうすればよいですか?