2013-02-17 8 views

答えて

4

注文したドリンクに数字のIDを使用して、このようなことを試してみるといいかもしれません。

"$customer_id": { 
    "drinks_ordered": { 
     "$drink_id": { 
      ".validate": "$drink_id > 0 && $drink_id < 16" // error 
     } 
    } 
} 

代わりに、あなたはカウンターを使用して、カウンターを検証1-15であることを、その後、IDカウンタと一致したドリンクを検証することができます:IDが文字列であるので、それは失敗します。クライアントは別の飲み物を追加することができます前に、彼らはそれができる唯一のものである(4にカウンタを設定する必要があります今

/bar/customers/george_thorogood/counter/3 
/bar/customers/george_thorogood/drinks_ordered/1/burbon 
/bar/customers/george_thorogood/drinks_ordered/2/scotch 
/bar/customers/george_thorogood/drinks_ordered/3/beer 

"$customer_id": { 
    "counter": { 
     // counter can only be incremented by 1 each time, must be a number 
     // and must be <= 15 
     ".validate": "newData.isNumber() && newData.val() > 0 && newData.val() <= 15 && ((!data.exists() && newData.val() === 1) || (newData.val() === data.val()+1))" 
    }, 
    "drinks_ordered": { 
     // new record's ID must match the incremented counter 
     "$drink_id": { 
      // use .val()+'' because $drink_id is a string and Firebase always uses ===! 
      ".validate": "root.child('bar/customers/'+$customer_id+'/counter').val()+'' == $drink_id" 
     } 
    } 
} 

当然のことながら、あなたの飲み物は、このようになります。 )に設定し、同じIDのドリンクを追加します。

+0

私はまた、最初の例を試みました。それをサポートさせると便利です。 カウンターメソッドは巧妙です! – abrkn

+0

私は '.val'が有効ではないというエラーが出てきたので、私はこれで苦労しました。問題は検証サンプルにありました。 ':validate': "root.child( '/ bar/customers /' + $ customer_id + '/ counter')。val()+ '' == $ drink_id" '、そうですか? – Justin

+0

ルックス、ジャスティン。ありがとう! – Kato

関連する問題