Схема Jugglingdb _validations внезапно поделился

Я хочу повторно использовать некоторые правила проверки (логин / регистрация). Однако, если я назначу проверки для схемы User, jugglingdb также добавит эти проверки в BaseUser (это не то, что я хочу, и я не знаю, как это происходит)

// Provide user properties to re-use for login validation
var common_properties = {
  email    : String,
  password : String
};

var common_validations = [ 
  ['email',    {validation: 'presence'}],
  ['email',    {validation: 'format', with: /@.*?\./}],
  ['password', {validation: 'presence'}],
  ['password', {validation: 'length', min: 6}] 
];

var BaseUser = schema.define('BaseUser', common_properties);
    BaseUser._validations = common_validations;


var User = schema.define('User', _.extend(common_properties, {
  name     : String,
  salt     : String,
  created  : { type: Date, default: Date.now }
}));

User._validations = common_validations;

User.validatesPresenceOf('name');
User.validatesUniquenessOf('email');


console.log(BaseUser._validations)

// [ [ 'email', { validation: 'presence' } ],
//  [ 'email', { validation: 'format', with: /@.*?\./ } ],
//  [ 'password', { validation: 'presence' } ],
//  [ 'password', { validation: 'length', min: 6 } ],
//  [ 'name', { validation: 'presence' }, undefined ],            Should not be here??
//  [ 'email', { validation: 'uniqueness' }, { async: true } ] ]  Should not be here??

Кто-нибудь знает, как это делает javascript / jugglingdb? Я просто хочу назначить common_validations для BaseUser, больше ничего.

1 ответ

Я не проследил это, но я предполагаю, что проблема в том, что вы назначаете один и тот же массив проверок (common_validations) для конструкторов BaseUser и User. Поскольку и BaseUser, и User имеют свойство _validations, которое указывает на один и тот же экземпляр массива, добавление новой проверки добавляет новую запись в этот массив, и, следовательно, оно отображается для обоих типов.

Попробуйте назначить _validations для копии массива common_validations вместо указания на общий экземпляр.

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