在Rails 3中,是否存在仅在字段存在时验证字段的快捷方式?

时间:2011-05-07 23:05:37

标签: ruby-on-rails validation

我发现自己这样做了:

validates_numericality_of :mileage,:if => Proc.new {|car| car.mileage.present? }

有时,里程字段可能不会被发送,但是当它被发送时,我希望它被验证。在我的代码中包含Proc是没有问题的,但它的代码是我为所有其他可选字段复制的。有:if => present?之类的快捷方式吗? 我正在使用Rails 3.0.5。

2 个答案:

答案 0 :(得分:8)

查看:allow_nil

  

:allow_nil - 如果设置为true,则跳过   如果属性是这个验证   nil(默认为false)。

根据API文档,空字符串在验证之前会转换为nils,因此这应该适用于任何一种情况。

答案 1 :(得分:1)

您可以使用before_validation挂钩将空字符串转换为nil,然后使用:allow_nil option to validates_numericality_of

before_validation :clean_up_milage # This would replace '' with nil
validates_numericality_of :milage, :allow_nil => true