У меня есть поле, которое я хотел бы проверить. Я хочу, чтобы поле можно было оставить пустым, но если пользователь вводит данные, я хочу, чтобы они были в определенном формате. В настоящее время я использую в модели следующие проверки, но это не позволяет пользователю оставлять поле пустым:
validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5
Как мне написать это, чтобы достичь своей цели?
ruby-on-rails
ruby
validation
model
bgadoci
источник
источник
Вы также можете использовать этот формат:
validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true
Или, поскольку ваши min и max одинаковы, также будет работать следующее:
validates :foo, length: {is: 5}, allow_blank: true
источник
Из документации validates_length_of :
validates_length_of :phone, :in => 7..32, :allow_blank => true
источник
Или еще более кратко (с новым синтаксисом хеширования) из документации по валидации :
validates :foo, length: 5..5, allow_blank: true
Верхний предел, вероятно, должен представлять что-то более значимое, например "in: 5..20", но просто ответ на вопрос по букве.
источник
in
будет работать со строками, похоже, только числаvalidates :foo, length: 2..5, allow_blank: true
но в случае OPкаждый validates_ * принимает: if или: except параметры
validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition
где validate_foo_condition - это метод, который возвращает true или false
вы также можете передать объект Proc:
validates_length_of :foo, :maximum => 5, :unless => Proc.new {|object| object.foo.blank?}
источник
validates_length_of :reason, minimum: 3, maximum: 30
rspec для того же самого
it { should validate_length_of(:reason).is_at_least(3).is_at_most(30) }
источник
Как насчет этого:
validates_length_of :foo, is: 3, allow_blank: true
источник
Добавьте в свою модель:
validates :color, length: { is: 7 }
цвет - строка:
t.string :color, null: false, default: '#0093FF', limit: 7
источник
В вашей модели, например
def validate errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc? end
источник