16

Rails アプリでは、モデルにいくつかの整数属性があります。

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

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

モデルでは、私はこのようなものを持っています

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."

保存するために最低限必要な属性でテストすると、次のようになります。

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.

:aに値が指定されている場合にのみ、数値と包含を検証するにはどうすれば:aよいですか?

ありがとう

4

2 に答える 2

31

に を追加でき:allow_nil => trueますvalidates_numericality_of

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

検証を 1 つだけ使用する場合は、オプションgreater_than_or_equal_toとオプションを使用することもできます。less_than_or_equal_to

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."
于 2012-05-22T11:10:54.223 に答える
3

単純にする必要があります:

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

2回目の検証も同様

于 2012-05-22T11:10:53.107 に答える