2016-05-11 8 views
0

シンプルなスキーマを使用して1つのフィールドを一意に設定しようとしています。しかし、私が何をしても、それは機能しません。ここで私はそれを設定する方法です:Meteor Collectionでフィールドを一意にすることができません

let schema = new SimpleSchema({ 
    name: { 
    type: String, 
    label: 'Committee name', 
    max: 200 
    }, 
    shortName: { 
    type: String, 
    label: 'Short name', 
    max: 10, 
    index: true, 
    sparse: true, 
    unique: true, 
    autoValue: (com) => { 
     if (com.shortName) { 
     return com.shortName.toLowerCase(); 
     } 
    } 
    }, 
}); 

私は流星をリセットしようとしました。重複した値を追加するとレコードは追加されませんが、検証時にエラーが発生することはありません。

+0

insert updateまたはupsertを使用していますか? – kpie

+0

アイテムを追加するには 'insert'を使用しますが、それ以前にはvalidateメソッドを使用してエラーを取得します:' Collection.simpleSchema()。namedContext( 'insertForm')。validate(values) ' – THpubs

答えて

0

単純なスキーマの一意のフィールドの検証は組み込まれていません。 official docsに記載されているように、カスタムの単純なスキーマ検証を使用する必要があります。

username: { 
    type: String, 
    regEx: /^[a-z0-9A-Z_]{3,15}$/, 
    unique: true, 
    custom() { 
    if (Meteor.isClient && this.isSet) { 
     Meteor.call("accountsIsUsernameAvailable", this.value, (error, result) => { 
     if (!result) { 
      this.validationContext.addValidationErrors([{ 
      name: "username", 
      type: "notUnique" 
      }]); 
     } 
     }); 
    } 
    } 
} 

これにより、検証コンテキストを使用してカスタム検証が呼び出されます。

注:フィールドにユニークなデータ項目が含まれているかどうかを確認するには、サーバー側のデータベースにクエリを実行する必要があるため、非同期になります。

関連する問題