我有一个字段,我想验证。我希望该字段能够留空,但如果用户输入数据,我希望它以某种格式。目前我使用的模型下面的验证,但这并不让用户留空:验证字符串的最小和最大长度,但允许它为空
validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5
我怎样写这个实现我的目标?
我有一个字段,我想验证。我希望该字段能够留空,但如果用户输入数据,我希望它以某种格式。目前我使用的模型下面的验证,但这并不让用户留空:验证字符串的最小和最大长度,但允许它为空
validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5
我怎样写这个实现我的目标?
我想可能需要这样的东西:
validates_length_of :foo, :minimum => 5, :maximum => 5, :allow_blank => true
从validates_length_of documentation:
validates_length_of :phone, :in => 7..32, :allow_blank => true
:allow_blank
- 属性可以是空白的;跳过验证。
在你的模型如
def validate
errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc?
end
每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 :foo, length: {minimum: 5, maximum: 5}, allow_blank: true
或者因为你的最小值和最大值是相同的,下面也将工作:
validates :foo, length: {is: 5}, allow_blank: true
甚至更简洁(与新的哈希语法),从validates documentation:
validates :foo, length: 5..5, allow_blank: true
上限应该可能代表更有意义,比如“in:5..20”,但只是回答这封信的问题。
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
你可以使用lenght限制特定的大小:是 – GuiGreg 2014-07-14 13:47:04