Ошибка ватерлинии: "Неизвестное правило: по умолчанию"

Я получаю следующую ошибку при звонке .create() на модели.

Модель:

attributes: {
    user : {
      type: 'integer'
    },
    number : {
      type: 'string'
    }
  }

Вызов:

sails.models.phone.create({ 
  user: 2,
  number: '5555555555',
  updated_at: Sun Nov 27 2016 16:59:45 GMT-0800 (PST) 
});

Ошибка:

Unknown rule: default
    at Object.matchRule (/Developer/repos/bond/api/node_modules/waterline/node_modules/anchor/lib/match/matchRule.js:38:11)
    at Anchor.to (/Developer/repos/bond/api/node_modules/waterline/node_modules/anchor/index.js:106:48)
    at afterwards (/Developer/repos/bond/api/node_modules/waterline/lib/waterline/core/validations.js:229:41)
    at /Developer/repos/bond/api/node_modules/async/lib/async.js:52:16
    at Object.async.forEachOf.async.eachOf (/Developer/repos/bond/api/node_modules/async/lib/async.js:236:30)
    at Object.async.forEach.async.each (/Developer/repos/bond/api/node_modules/async/lib/async.js:209:22)
    at _eachValidation (/Developer/repos/bond/api/node_modules/waterline/lib/waterline/core/validations.js:189:11)
    at /Developer/repos/bond/api/node_modules/async/lib/async.js:181:20
    at Object.async.forEachOf.async.eachOf (/Developer/repos/bond/api/node_modules/async/lib/async.js:233:13)
    at Object.async.forEach.async.each (/Developer/repos/bond/api/node_modules/async/lib/async.js:209:22)
    at Validator.validate (/Developer/repos/bond/api/node_modules/waterline/lib/waterline/core/validations.js:144:9)
    at /Developer/repos/bond/api/node_modules/waterline/lib/waterline/query/validate.js:42:25
    at /Developer/repos/bond/api/node_modules/async/lib/async.js:718:13
    at Immediate.iterate [as _onImmediate] (/Developer/repos/bond/api/node_modules/async/lib/async.js:262:13)
    at processImmediate [as _immediateCallback] (timers.js:383:17)

Как это исправить?

Я смотрел на подобные ошибки, но ни одна из моих моделей не имеет default атрибут, в том числе phone модель показанная выше. Почему это происходит, и как мне это решить?


Решение

Вот и получается, что звонок по Ватерлинии .update() изменяет входную информацию. Я написал функцию для создания или обновления моделей ватерлинии, и когда они исправили проблему автоматического updated_at, они, должно быть, изменили входящую информацию.

Мой предыдущий код, который не работал:

createOrUpdate: function(model, primary, data){
  return model.update(primary, data)
  .then(function updateCB(updated){
    if (updated.length == 0){
      return model.create(data) //data here had an added updated_at field
      .then(function(created){
        return created;
      });
    }

    if (updated.length > 0){
      updated = updated[0];
    }
    return updated;
  });
}

Мой новый код, который работает:

createOrUpdate: function(model, primary, data){
  const data1 = JSON.parse(JSON.stringify(data)); // deep copy
  const data2 = JSON.parse(JSON.stringify(data)); // deep copy
  return model.update(primary, data1)
  .then(function updateCB(updated){
    if (updated.length == 0){
      return model.create(data2)
      .then(function(created){
        return created;
      });
    }

    if (updated.length > 0){
      updated = updated[0];
    }
    return updated;
  });
}

1 ответ

Решение

Вы не можете вызвать обновление с:

updated_at: Sun Nov 27 2016 16:59:45 GMT-0800 (PST) 

Updated_at - это автоматически заполненное поле. Уберите его из запроса (звоните так, как вы его называете), и он будет работать.

Другие вопросы по тегам