在Sam Ruby的 Agile Web Development with Rails 4 的第94页上,我找到了以下代码:
class Product < ActiveRecord::Base
validates :title, :description, :image_url, presence: true
validates :image_url, allow_blank: true, format: {
with: %r{\.(gif|jpg|png)\Z}i,
message: 'must be a URL for GIF, JPG or PNG image.'
}
# other validations...
end
我对此的理解是,:image_url, presence: true
是要求文字字段image_url
不要留空的声明,我的理解与:image_url, allow_blank: true
相矛盾。
这实际上是一个矛盾,因此是书中的错误,还是我的理解错误?
答案 0 :(得分:1)
如果您阅读本书第84页,他特别说......
请注意,我们使用allow_blank选项来避免获取多个 字段为空时出现错误消息。
所以它只是为了确保在空白条件下只向object.errors添加一个错误。如果你没有指定“允许空白”,那么你将得到“不能为空”和“必须是gif / jpg / png”的消息,这些消息实际上对最终用户来说是不明确的。 “不能空白”就足够了。
也就是说,匹配格式错误我们允许它高兴地忽略空白条目,因为我们知道它们被其他验证所捕获。