2013-02-17 41 views

Trả lời

4

Có vẻ như bạn có thể sử dụng id số cho đồ uống được đặt hàng và sau đó thử một cái gì đó như thế này; nó sẽ thất bại kể từ ID là một chuỗi:

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

Thay vào đó, bạn có thể sử dụng một bộ đếm và xác thực truy cập được 1-15, và sau đó xác nhận các thức uống ID phù hợp với truy cập.

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

Đương nhiên, thức uống của bạn sẽ trông giống như thế này:

/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 

Bây giờ trước khi một khách hàng có thể thêm ly nữa, họ sẽ phải thiết lập bộ đếm đến 4 (đó là điều duy nhất nó có thể được đặt thành) và sau đó thêm đồ uống có cùng ID đó.

Vòng xoay nhỏ, nhưng nó thực hiện công việc:)

+0

Tôi cũng đã thử ví dụ đầu tiên. Sẽ rất thuận tiện khi được hỗ trợ. Phương thức truy cập thông minh! – abrkn

+0

Tôi đấu tranh với điều này bởi vì tôi đã nhận được một lỗi về '.val' không hợp lệ. Vấn đề là với mẫu xác nhận. Nên là: '" .validate ":" root.child ('/ bar/customers /' + $ customer_id + '/ counter'). Val() + '' == $ drink_id "', phải không? – Justin

+0

Có vẻ đúng, Justin. Cảm ơn! – Kato

Các vấn đề liên quan