2012-08-04 31 views
35

Các trường của tôi là: tax ratetax amount trong đó tôi muốn xác thực giá trị dương.Xác thực cho số nguyên không âm và giá trị thập phân

tôi đã viết xác nhận điều này:

:format => { :with => /\A[+]?\d+\Z/} 

Nhưng nó không được dùng số với một dấu thập phân như 4.67. Và nó đã ném cho tôi một lỗi. Loại xác thực nào sẽ hoạt động trên các số nguyên và giá trị dấu phẩy động? ví dụ: 2, 57, 54.56 phải qua nhưng -2.56, -87 sẽ không thành công.

Trả lời

107

Điều này có hiệu quả không?

validates :your_field, :numericality => { :greater_than_or_equal_to => 0 } 

(đoán cho các loại thuế theo quy tắc sẽ được chính xác hơn :)

validates :your_field, :numericality => { :greater_than_or_equal_to => 0, :less_than_or_equal_to => 100 } 
+0

Thanx cho phản hồi. Tôi sẽ thử nó. –

+0

là trường một chuỗi hoặc một phao? Nếu nó không phải là một chuỗi, bạn không nên làm regexp trên nó. Một cái gì đó giống như ví dụ này sẽ tốt hơn. Bạn sẽ cần một xác nhận mà chỉ cần kiểm tra nếu nó <0 – Ultimation

6

Bạn có thể sử dụng:

validates :tax_rate, inclusion: { in: 0..5 } 

Nó cho phép các giá trị như: 0, 2, 1.2, 3.2

Hy vọng điều đó sẽ hữu ích!

+2

Tôi đã sử dụng cú pháp rất giống nhau trong một số xác nhận tôi đã thử nghiệm trước đó nhưng quyết định không sử dụng nó. Nếu người dùng nhập giá trị ngoài phạm vi đó, họ sẽ nhận được lỗi có nội dung như "giá trị không được bao gồm". Tôi đã chọn một giải pháp như ': greater_than_or_equal_to' vì người dùng được trình bày với một lỗi có ý nghĩa hơn. – Tass

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