#350: Creating a batch via hasMany relation is failing. Added handling of array argument.

This commit is contained in:
Alex Voitau 2014-11-07 18:01:18 -08:00
parent f1638e9e4c
commit 5c2468c4ef
2 changed files with 38 additions and 7 deletions

View File

@ -1534,20 +1534,32 @@ HasMany.prototype.create = function (targetModelData, cb) {
var fk = this.definition.keyTo; var fk = this.definition.keyTo;
var pk = this.definition.keyFrom; var pk = this.definition.keyFrom;
var modelInstance = this.modelInstance; var modelInstance = this.modelInstance;
if (typeof targetModelData === 'function' && !cb) { if (typeof targetModelData === 'function' && !cb) {
cb = targetModelData; cb = targetModelData;
targetModelData = {}; targetModelData = {};
} }
targetModelData = targetModelData || {}; targetModelData = targetModelData || {};
targetModelData[fk] = modelInstance[pk];
var fkAndProps = function(item) {
this.definition.applyProperties(modelInstance, targetModelData); item[fk] = modelInstance[pk];
self.definition.applyProperties(modelInstance, item);
};
var apply = function(data, fn) {
if (Array.isArray(data)) {
data.forEach(fn);
} else {
fn(data);
}
};
apply(targetModelData, fkAndProps);
modelTo.create(targetModelData, function(err, targetModel) { modelTo.create(targetModelData, function(err, targetModel) {
if(!err) { if(!err) {
// Refresh the cache //Refresh the cache
self.addToCache(targetModel); apply(targetModel, self.addToCache.bind(self));
cb && cb(err, targetModel); cb && cb(err, targetModel);
} else { } else {
cb && cb(err); cb && cb(err);

View File

@ -87,6 +87,25 @@ describe('relations', function () {
}); });
}); });
it('should create a batch of records on scope', function (done) {
var chapters = [
{name: 'a'},
{name: 'z'},
{name: 'c'}
];
Book.create(function (err, book) {
book.chapters.create(chapters, function (err, chs) {
should.not.exist(err);
should.exist(chs);
chs.should.have.lengthOf(chapters.length);
chs.forEach(function(c) {
c.bookId.should.equal(book.id);
});
done();
});
});
});
it('should fetch all scoped instances', function (done) { it('should fetch all scoped instances', function (done) {
Book.create(function (err, book) { Book.create(function (err, book) {
book.chapters.create({name: 'a'}, function () { book.chapters.create({name: 'a'}, function () {