在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
为零?
由于
答案 0 :(得分:30)
您可以向:allow_nil => true
添加validates_numericality_of
。
validates_numericality_of :a, :only_integer => true, :allow_nil => true,
:message => "can only be whole number."
如果您只想使用一个验证,还可以使用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."
答案 1 :(得分:3)
应该简单:
validates_numericality_of :a, :only_integer => true, :message => "can only be whole number.", :allow_nil => true
第二次验证相同