Как проверять численность и включение, сохраняя при этом атрибут nil в некоторых случаях?

В приложении 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 в некоторых случаях является нулевым?

Спасибо

Ответы

Ответ 1

Вы можете добавить :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."

Ответ 2

должен быть просто:

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

для второй проверки