From 9bbac568073073b1527e18379d55578e3e2a8b11 Mon Sep 17 00:00:00 2001 From: Kyle Van Wagenen Date: Mon, 2 Sep 2013 12:44:45 -0600 Subject: [PATCH 1/2] Fix for removing array of to-many associations with a single call to remove --- lib/Associations/Many.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Associations/Many.js b/lib/Associations/Many.js index df5734dc..be5f2b9a 100644 --- a/lib/Associations/Many.js +++ b/lib/Associations/Many.js @@ -259,6 +259,7 @@ function extendInstance(Model, Instance, Driver, association, opts, createInstan value: function () { var Associations = Array.prototype.slice.apply(arguments); var cb = (typeof Associations[Associations.length - 1] == "function" ? Associations.pop() : noOperation); + Associations = (Associations[0] instanceof Array ? Associations.pop() : Associations) var conditions = {}; var run = function () { if (Driver.hasMany) { From d2c1ff57c241bf353cc05a0667fea58c8f231900 Mon Sep 17 00:00:00 2001 From: Kyle Van Wagenen Date: Mon, 2 Sep 2013 12:58:29 -0600 Subject: [PATCH 2/2] Replaced argument handling of to-many remove handler with more robust logic as in the add handler --- lib/Associations/Many.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/Associations/Many.js b/lib/Associations/Many.js index be5f2b9a..7438c0c5 100644 --- a/lib/Associations/Many.js +++ b/lib/Associations/Many.js @@ -257,9 +257,22 @@ function extendInstance(Model, Instance, Driver, association, opts, createInstan }); Object.defineProperty(Instance, association.delAccessor, { value: function () { - var Associations = Array.prototype.slice.apply(arguments); - var cb = (typeof Associations[Associations.length - 1] == "function" ? Associations.pop() : noOperation); - Associations = (Associations[0] instanceof Array ? Associations.pop() : Associations) + var Associations = []; + var cb = noOperation; + for (var i = 0; i < arguments.length; i++) { + switch (typeof arguments[i]) { + case "function": + cb = arguments[i]; + break; + case "object": + if (Array.isArray(arguments[i])) { + Associations = Associations.concat(arguments[i]); + } else if (arguments[i].isInstance) { + Associations.push(arguments[i]); + } + break; + } + } var conditions = {}; var run = function () { if (Driver.hasMany) {