Вопрос по ruby-on-rails – Как проверить численность и включение, при этом оставляя атрибут в некоторых случаях равным нулю?

14

В приложении 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   ответа
3

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

то же самое для второй проверки

спасибо, это было как раз то, что мне было нужно. Я дал ответ Шэдвеллу за его СУХОЙ код. Позор, я не могу пометить и то, и другое как правильное. Andy Harvey
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."

Похожие вопросы