Как проверять численность и включение, сохраняя при этом атрибут 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
для второй проверки