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为 nil?

谢谢

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

如果您只想使用一种验证,也可以使用greater_than_or_equal_toand选项: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

第二次验证相同

于 2012-05-22T11:10:53.107 回答