2012-04-17 26 views
10

Chúng tôi đang sử dụng sau đây để kiểm tra xem stock_qty (một số nguyên hoặc một phao Có thể là zero nhưng không nil.) Là lớn hơn hoặc bằng zero:: GREATER_THAN_OR_EQUAL_TO trong validates_numericality_of chỉ một phần hoạt động trong đường ray 3.1

validates_numericality_of :stock_qty, :greater_than_or_equal_to => 0 
validates_numericality_of :stock_qty, :less_than_or_equal_to => :in_qty, :if => Proc.new { |part| !part.in_qty.nil? } 

: in_qty là một cột trong mô hình một phần. Việc xác thực này sẽ cho phép tích cực hoặc 0 cho: stock_qty. Vấn đề là rspec thất bại nếu: stock_qty được gán 0. Tôi nhận thấy rằng: less_than_or_equal_to chỉ cho phép less_than và không cho phép equal_to. Có cách nào để xác thực> = hoặc < = trong đường ray 3.1 không? Hoặc điều gì có thể xảy ra với mã xác thực của chúng tôi ở trên. Cám ơn rất nhiều.

+0

Đoạn mã trên dường như tất cả đúng ... – user938363

Trả lời

15

thử thêm :only_integer => true như vậy:

validates_numericality_of :stock_qty, :only_integer => true, :greater_than_or_equal_to => 0 

EDIT

nếu điều này cần phải vượt qua khi stock_qty là con số không hoặc bằng không bạn cần phải thay đổi mã của bạn như thế này:

validates_numericality_of :stock_qty, :allow_nil => true, :greater_than_or_equal_to => 0 
validates_numericality_of :stock_qty, :allow_nil => true, :less_than_or_equal_to => :in_qty, :if => Proc.new { |part| !part.in_qty.nil? } 
+0

Chỉ cần nói thêm: stock_qty có thể là một trong hai số nguyên hoặc phao. Cảm ơn. – user938363

+0

: only_integer => true không thay đổi kết quả rspec. – user938363

+0

Thử nghiệm này có cần phải vượt qua nếu stock_qty bằng 0 hay không? –

1

Cũng bạn có thể tin rằng có 0 trong khi có nil. nil sẽ không vượt qua kiểm tra này.

+0

Ý của bạn là 0 và không được xử lý giống nhau trong quá trình xác nhận? – user938363

+0

Không, hoàn toàn ngược lại: bạn có thể viết một cái gì đó như 'Model1.new.valid?' Và nhận 'false' trong khi' stock_qty' là 'nil'. Đó là lời giải thích duy nhất có trong tâm trí (bởi vì tôi hy vọng bạn không thực hiện một xác nhận khác cho mô hình của bạn mà không làm bạn quên nó). – jdoe

7
validates :stock_qty, :numericality => { :only_integer => true, :greater_than_or_equal_to => 0 } 

nó hoạt động trong ứng dụng 3.1 của tôi, trong trường hợp của tôi, tôi có giá cả, và khi tôi cập nhật hoặc thêm sản phẩm wthout giá Tôi đã là "nó không phải là một số" lỗi, hoặc một cái gì đó như thế, nhưng tôi không thể đặt một cột giá 0 và nó cập nhật tốt. hi vọng điêu nay co ich.

: greater_than_or_equal_to – Chỉ định giá trị phải lớn hơn hoặc bằng giá trị được cung cấp. Thông báo lỗi mặc định cho tùy chọn này là “phải lớn hơn hoặc bằng% {count}”.

http://guides.rubyonrails.org/active_record_validations_callbacks.html

+0

Đã thử chính xác bằng cách sử dụng xác nhận hợp lệ, rspec vẫn không thành công với stock_qty == 0. Cảm ơn. – user938363

+0

Tuy nhiên trong giao diện điều khiển đường ray, bạn có thể lưu bản ghi với 0 stock_qty. Có vẻ như rspec đã thất bại nhưng mô hình thực tế đã trôi qua. Lạ thật! – user938363

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