我正在阅读“使用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验证是做什么的?为什么我们不验证:价格也存在?
答案 0 :(得分:6)
我可以看出为什么你对此感到困惑---它不是很清楚! allow_blank: true
的含义是,如果image_url
为空,则format
验证程序将无法运行。 presence
验证程序仍将运行,因为它的声明没有allow_blank
选项。
本书这样做的原因是,如果用户将字段留空,则应避免向用户显示2条验证消息。你真的不希望用户看到&#34;图片网址不能为空;图片网址必须包含图片文件扩展名&#34;。最好只显示一条消息,说明它是空白的。换句话说,如果有需要验证的话,我们只想运行格式验证器。