SailsJS: предотвратите Model.create(), если он имеет необъявленные атрибуты

Есть ли способ предотвратить создание объекта, если он содержит атрибут, не объявленный в API/Models/YourModel?

Например, предположим, что я использовал MongoDB, и у меня есть эта модель User:

module.exports = {
  attributes: {
    name:{type:'string'},
    age:{type:'number'}
  }
};

и я пытаюсь .create с этим кодом:

User.create({name:'Walter Jr',age:8,missingTest:'something'}).exec(function createCB(err,created){
  console.log('should fail');
});

Кроме того, если есть отношение/ассоциация с другой моделью, не должно ли создание также завершиться ошибкой, если идентификатор объекта указывает на недопустимый объект?

Возможно, я что-то упускаю в процессе проверки, но пока поведение кажется мне немного странным, также было бы неплохо, если бы у водной линии была поддержка составного первичного ключа.


person Alon Amir    schedule 27.03.2015    source источник


Ответы (1)


Вы можете попробовать поставить schema : true в config/models.js

Док сказать:

Флаг для переключения режима без схемы или режима схемы в базах данных, поддерживающих структуры данных без схемы. Если его отключить, это позволит вам хранить произвольные данные в записи. Если включено, будут сохранены только атрибуты, определенные в объекте атрибутов модели. Для адаптеров, которым не требуется схема, таких как Mongo или Redis, значением по умолчанию является схема: ложь.

http://sailsjs.org/#!/documentation/concepts/ORM/model-settings.html

person jaumard    schedule 27.03.2015
comment
Звучит правильно, но я пытался записать schema: true в config/models.js, и ничего не вышло, странно. - person Alon Amir; 27.03.2015
comment
Вы пытались сначала очистить базу данных, а затем перезагрузить сервер? - person jaumard; 27.03.2015
comment
Я установил migrate: 'drop', попытался перезапустить mongod, при создании еще не было ошибок, также в журнале видно, что БД действительно упала. - person Alon Amir; 27.03.2015
comment
Если это поможет, я использую версию узла v0.10.38, версию MongoDB 3.0.1. - person Alon Amir; 27.03.2015
comment
Подсчитано, что он игнорирует отсутствующие атрибуты вместо передачи аргумента ошибки. так что это работает, хотя и не совсем так, как я ожидал. - person Alon Amir; 27.03.2015
comment
Если вы хотите выдать ошибку, вы можете для каждой модели переопределить метод beforeValidate и проверить свою модель вручную. sailsjs.org/#!/documentation/concepts/ORM/ - person jaumard; 27.03.2015