2012-04-17 14 views
10

raylar çalışan:: validates_numericality_of içinde GREATER_THAN_OR_EQUAL_TO kısmen Biz sıfırdan büyük veya sıfıra eşittir stock_qty (. Bir tam sayı ya da bir yüzdürme sıfır, ancak sıfır olabilir) kontrol etmek amacıyla, aşağıdaki kullanılarak 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, parça modelindeki bir sütundur. Bu doğrulama, pozitif için 0 veya 0'a izin vermelidir: stock_qty. Sorun şu ki, rspec başarısız oldu: stock_qty sıfır olarak atanmışsa. Bunu fark ettim: less_than_or_equal_to sadece less_than'a izin verdi ve equal_to'ya izin vermedi. > = Veya < = raylarda 3.1 doğrulamak için bir yolu var mı? Ya da yukarıdaki doğrulama kodumuzda yanlış olan ne olabilir? Çok teşekkürler.

+0

Yukarıdaki kod tamam ... – user938363

cevap

15

şöyle :only_integer => true ekleyerek deneyin:

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

DÜZENLEME

bu stock_qty yoktur ya da bu için kodunuzu değiştirmeniz gerekir sıfır olduğunda geçmesi gerekiyorsa: Ayrıca

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

Sadece eklendi görünüyor. Teşekkürler. – user938363

+0

: only_integer => true, rspec sonucunu değiştirmedi. – user938363

+0

Eğer stock_qty sıfır veya sıfır ise bu testin geçmesi gerekiyor mu? –

1

nil iken 0 olduğuna inanabilirsiniz. Bu denetimi nil geçemez.

+0

Sıfır ve sıfırın validasyonda aynı muameleye tabi tutulduğunu mu demek istediniz? – user938363

+0

Hayır, tam tersi: “Model1.new.valid” gibi bir şey yazabilir ve 'stock_qty'' nil' iken 'false'ı alabilirdiniz. Akla gelen tek açıklama budur (çünkü umarım sizin için bir başka doğrulama yapmamış olursunuz, bunu unuttuysanız). – jdoe

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

ben fiyatı var ve güncellemek veya fiyat wthout ürünü eklerken hata, ya da onun gibi bir şey "bu bir sayı değil" var, ama elimden benim durumumda, benim 3.1 app çalışır fiyat sütununa 0 koyun ve sadece iyi güncellenir. Bu yardımcı olur umarım.

: greater_than_or_equal_to – Değerin, sağlanan değerden büyük veya ona eşit olması gerektiğini belirtir. Bu seçenek için varsayılan hata mesajı “% {count} değerine eşit veya daha büyük olmalıdır”. stock_qty integer veya float türünde olabilir:

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

+0

Doğruları kullanarak aynı şeyi denediniz, rspec hala stock_qty == 0 ile başarısız oldu. Teşekkürler. – user938363

+0

Ancak, raylar konsolunda, 0 stock_qty ile bir kayıt kaydetmek tamamdır. Rspec başarısız oldu ama gerçek model geçti gibi görünüyor. Garip! – user938363