我有一個字段,我想驗證。我希望該字段能夠留空,但如果用戶輸入數據,我希望它以某種格式。目前我使用的模型下面的驗證,但這並不讓用戶留空:驗證字符串的最小和最大長度,但允許它爲空
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