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

时间:2012-05-22 11:06:04

标签: ruby-on-rails

在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为零?

由于

2 个答案:

答案 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_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."

答案 1 :(得分:3)

应该简单:

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

第二次验证相同