I am trying to save variant options as an object, something like that: {'1' : {optionTitle: 'title', optionPrice: 12}, '2': {....}} //schema
RestMenuVariants.attachSchema(new SimpleSchema({
restRefId: {type: String},
createdBy:{type: String},
title: {type: String},
options: {type: Object},
sortId: {type: String, optional: true},
createdAt: {type: Date}
}));
//part of the method addMenuVariantItem
return RestMenuVariants.insert({
restRefId: restId,
createdBy: Meteor.userId(),
createdAt: new Date(),
title: title,
options: options,
sort_id: sortId
});
// part of the event for loop which creates the object
variantOptions[i] = {optionTitle: $(element).val(), optionPrice: $(elementPrice).val()};
}
// and calling the method
Meteor.call('addMenuVariantItem', this._id, this.createdBy, variantTitle, variantOptions, function(error, result){.....})
I don't get any check or other errors, the variant is saved but when I look for the item at the console i see that the options is an empty object: //var cursor = RestMenuVariants.findOne({_id: id}); //console.log(cursor.options)
Object {}
What am I missing? Thanks.
It looks like variantOptions is being created as an array but your schema only expects an object.
Change:
options: {type: Object}
to
options: {type: [Object], blackbox: true },
in your schema definition.
The blackbox: true option tells simple-schema to ignore the structure of the objects being put into the options array.
Also note that an array is != a nested object with numbered keys as you have in your description. You won't get:
{
'1': {optionTitle: 'title', optionPrice: 12},
'2': {....}
}
Instead you'll see:
[
{ optionTitle: 'title', optionPrice: 12 },
{....}
]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With