2012-05-22 5 views
14

Railsアプリケーションでは、モデルにいくつかの整数属性があります。数値とインクルードを検証して、属性がゼロになることを許容する方法

ユーザーはレコードを作成し、これらの属性を空白のままにしておく必要があります。

ユーザーがこれらの属性の値を入力する場合は、数値と特定の範囲内で検証する必要があります。

factory :model do 
    sequence(:name) { |n| "model#{n}" } 
end 

it "should save with minium attributes" do 
    @model = FactoryGirl.build(:model) 
    @model.save.should == false 
end 

どのようにすることができ、私は

Validation failed: a can only be whole number., a can only be between 1 and 999. 

を得る:私は今、保存するために最低限必要な属性をテストする場合、私はこの

validates_presence_of :name  
validates_numericality_of :a, :only_integer => true, :message => "can only be whole number." 
validates_inclusion_of :a, :in => 1..999, :message => "can only be between 1 and 999." 

のようなものを持っているモデルでは

:aの値が与えられている場合に限り、数値とインクルードを検証しますが、それでもなお有効です場合によってはがnilになることはありませんか?

おかげ

答えて

29

のためにあなたがあなたのvalidates_numericality_of:allow_nil => trueを追加することができます。あなただけの1つの検証に使用したい場合にもgreater_than_or_equal_toless_than_or_equal_toオプションを使用することができます

validates_numericality_of :a, :only_integer => true, :allow_nil => true, 
    :message => "can only be whole number." 

validates_numericality_of :a, :only_integer => true, :allow_nil => true, 
    :greater_than_or_equal_to => 1, 
    :less_than_or_equal_to => 999, 
    :message => "can only be whole number between 1 and 999." 
+0

ありがとう、すばらしい答え –

3

は、単純に次のようになります。

validates_numericality_of :a, :only_integer => true, :message => "can only be whole number.", :allow_nil => true 

同じ第二の検証

+0

おかげで、これは私が必要なものだけでした。 ShadwellにDRYコードの答えを与えました。恥私は正しいと両方をマークすることはできません。 –

関連する問題