验证字符串的最小和最大长度,但允许它为空

bga*_*oci 75 ruby validation model ruby-on-rails

我有一个我想验证的字段.我希望该字段可以留空,但如果用户输入数据,我希望它以某种格式.目前我在模型中使用以下验证,但这不允许用户将其留空:

validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5
Run Code Online (Sandbox Code Playgroud)

我如何写这个来实现我的目标?

Dig*_*oss 122

我想它可能需要这样的东西:

validates_length_of :foo, minimum: 5, maximum: 5, allow_blank: true
Run Code Online (Sandbox Code Playgroud)

更多示例:ActiveRecord :: Validations :: ClassMethods

  • 对于特定大小,您可以使用长度约束:is (6认同)

qua*_*njn 114

您也可以使用以下格式:

validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true
Run Code Online (Sandbox Code Playgroud)

或者由于你的最小值和最大值相同,以下内容也适用:

validates :foo, length: {is: 5}, allow_blank: true
Run Code Online (Sandbox Code Playgroud)


Gar*_*eth 11

来自validates_length_of文档:

validates_length_of :phone, :in => 7..32, :allow_blank => true
Run Code Online (Sandbox Code Playgroud)

:allow_blank - 属性可能为空; 跳过验证.


Fel*_*ger 8

或者更简洁(使用新的哈希语法),来自验证文档:

validates :foo, length: 5..5, allow_blank: true
Run Code Online (Sandbox Code Playgroud)

上限应该代表一些更有意义的东西,比如"in:5..20",但只是回答了问题.