如何在某些情况下仍允许属性为零时validation数值和包含?

在Rails应用程序中,我在模型上有几个整数属性。

用户应该能够创建记录并将这些属性留空。

或者,如果用户输入这些属性的值,则应对其进行数值validation并在一定范围内进行validation。

在模型中,我有类似的东西

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. 

只有在给出以下值时才能validation数值和包含:a ,同时仍允许:a在某些情况下为零?

谢谢

您可以在validates_numericality_of添加:allow_nil => true

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

如果您只想使用一个validation,也可以使用greater_than_or_equal_toless_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." 

应该简单地说:

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

同样用于第二次validation