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