我正在阅读"使用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
Run Code Online (Sandbox Code Playgroud)
我不理解的是我们将image_url,allow_blank设置为true,但是我们必须验证image_url是否存在?乍一看,这似乎与我相矛盾,但我确信这是因为缺乏理解.
allow_blank验证是做什么的?为什么我们不验证:价格也存在?
我明白为什么你对此感到困惑---它不是很清楚!意思allow_blank: true是如果image_url为空,则format验证器不会运行.该presence验证程序将继续运行,因为它的声明中没有allow_blank选项.
本书这样做的原因是,如果用户将字段留空,则应避免向用户显示2条验证消息.您真的不希望用户看到"图片网址不能为空;图片网址必须包含图片文件扩展名".最好只显示一条消息,说明它是空白的.换句话说,如果有需要验证的话,我们只想运行格式验证器.