From 96787ad25f530b7e3654ed81e033f69b22b1bcac Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Wed, 24 Jul 2013 22:51:25 -0700 Subject: [PATCH] Fix id references --- lib/dao.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/dao.js b/lib/dao.js index c536592a..2cc873c0 100644 --- a/lib/dao.js +++ b/lib/dao.js @@ -85,7 +85,7 @@ DataAccessObject.create = function (data, callback) { data = {}; } - if (data instanceof Array) { + if (Array.isArray(data)) { var instances = []; var errors = Array(data.length); var gotError = false; @@ -117,7 +117,7 @@ DataAccessObject.create = function (data, callback) { var obj; // if we come from save - if (data instanceof Model && !data.id) { + if (data instanceof Model && !getIdValue(this, data)) { obj = data; } else { obj = new Model(data); @@ -182,6 +182,16 @@ function stillConnecting(dataSource, obj, args) { return true; }; +function getIdValue(m, data) { + return data && data[m.dataSource.idName(m.modelName)]; +} + +function setIdValue(m, data, value) { + if(data) { + data[m.dataSource.idName(m.modelName)] = value; + } +} + /** * Update or insert */ @@ -189,7 +199,7 @@ DataAccessObject.upsert = DataAccessObject.updateOrCreate = function upsert(data if (stillConnecting(this.dataSource, this, arguments)) return; var Model = this; - if (!data.id) return this.create(data, callback); + if (!getIdValue(this, data)) return this.create(data, callback); if (this.dataSource.connector.updateOrCreate) { var inst = new Model(data); this.dataSource.connector.updateOrCreate(Model.modelName, inst.toObject(true), function (err, data) { @@ -203,7 +213,7 @@ DataAccessObject.upsert = DataAccessObject.updateOrCreate = function upsert(data callback(err, obj); }); } else { - this.findById(data.id, function (err, inst) { + this.findById(getIdValue(this, data), function (err, inst) { if (err) return callback(err); if (inst) { inst.updateAttributes(data, callback); @@ -276,8 +286,8 @@ DataAccessObject.findById = function find(id, cb) { this.dataSource.connector.find(this.modelName, id, function (err, data) { var obj = null; if (data) { - if (!data.id) { - data.id = id; + if (!getIdValue(this, data)) { + setIdValue(this, data, id); } obj = new this(); obj._initProperties(data, false);