validationstring的最小和最大长度,但允许它为空
我有一个我想validation的字段。 我希望字段能够留空,但是如果用户input数据,我希望它是一个特定的格式。 目前我在模型中使用下面的validation,但是这不允许用户留下空白:
validates_length_of :foo, :maximum => 5 validates_length_of :foo, :minimum => 5
我如何写这个来实现我的目标?
我认为它可能需要像这样的东西:
validates_length_of :foo, :minimum => 5, :maximum => 5, :allow_blank => true
更多例子: ActiveRecord :: Validations :: ClassMethods
你也可以使用这种格式:
validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true
或者因为你的最小和最大值是相同的,下面的也将起作用:
validates :foo, length: {is: 5}, allow_blank: true
从validates_length_of文档 :
validates_length_of :phone, :in => 7..32, :allow_blank => true
:allow_blank
– 属性可能为空; 跳过validation。
或者从validation文档中更简洁(使用新的哈希语法):
validates :foo, length: 5..5, allow_blank: true
上限应该可能代表更有意义的,如“in:5..20”,而只是回答这个问题。
每个validates_ *接受:如果或:除非选项
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
在你的模型,例如
def validate errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc? end