0

いくつかの検証ルール (ログイン/登録) を再利用したい。ただし、検証を 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 に割り当てたいだけで、他には何もありません。

4

1 に答える 1

0

私はそれを追跡していませんが、問題は同じ検証配列 (common_validations) を BaseUser コンストラクターと User コンストラクターの両方に割り当てていることだと思います。BaseUser と User の両方に同じ配列インスタンスを指す _validations プロパティがあるため、新しい検証を追加するとその配列に新しいエントリが追加され、両方のタイプに表示されます。

共有インスタンスを指すのではなく、common_validations 配列のコピーに _validations を割り当ててみてください。

于 2013-09-04T20:14:50.933 に答える