2013-02-17 9 views

Odpowiedz

4

Może się wydawać, że możesz użyć identyfikatora liczbowego do zamówionych napojów, a następnie spróbuj czegoś takiego; zakończy się niepowodzeniem, ponieważ identyfikator jest ciągiem:

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

Zamiast tego można użyć licznika i zatwierdź licznik się 1-15, a następnie zatwierdź identyfikator napój pasuje licznik.

"$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" 
     } 
    } 
} 

Naturalnie twoje napoje będzie wyglądać następująco:

/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 

Teraz zanim klient może dodać kolejnego drinka, to musiałby ustawić licznik do 4 (która jest jedyną rzeczą, że może ustaw na), a następnie dodaj napój o tym samym ID.

Małe rondo, ale spełnia swoje zadanie:)

+0

Podjęłam również próbę pierwszego przykładu. Byłoby wygodne, gdyby było obsługiwane. Metoda licznika jest sprytna! – abrkn

+0

Zmagałem się z tym, ponieważ ciągle otrzymywałem błąd, że '.val' nie jest ważny. Problem polegał na próbie sprawdzania poprawności. Powinno to być: '" .validate ":" root.child ('/ bar/clients /' + $ customer_id + '/ counter'). Val() + '' == $ drink_id "', prawda? – Justin

+0

Wygląda dobrze, Justin. Dzięki! – Kato

Powiązane problemy