rails validations allow_blank and presence

时间:2016-04-21 02:12:22

标签: ruby-on-rails

我正在阅读“使用rails进行敏捷Web开发”这本书,我正在进行验证的部分,如下所示:

class Product < ActiveRecord::Base
  validates :description, :title, :image_url, presence: true
  validates :price, numericality: {greater_than_or_equal_to: 0.01}
  validates :title, uniqueness: true
  validates :image_url, allow_blank: true, format: {
    with: %r{\.(gif|jpg|png)\z}i,
    message: 'Must include an image file extension'
  }
end

我不理解的是我们将image_url,allow_blank设置为true,但是我们必须验证image_url是否存在?乍一看,这似乎与我相矛盾,但我确信这是因为缺乏理解。

allow_blank验证是做什么的?为什么我们不验证:价格也存在?

1 个答案:

答案 0 :(得分:6)

我可以看出为什么你对此感到困惑---它不是很清楚! allow_blank: true的含义是,如果image_url为空,则format验证程序将无法运行。 presence验证程序仍将运行,因为它的声明没有allow_blank选项。

本书这样做的原因是,如果用户将字段留空,则应避免向用户显示2条验证消息。你真的不希望用户看到&#34;图片网址不能为空;图片网址必须包含图片文件扩展名&#34;。最好只显示一条消息,说明它是空白的。换句话说,如果有需要验证的话,我们只想运行格式验证器。