这些验证声明是否矛盾?

时间:2014-03-05 09:35:38

标签: validation ruby-on-rails-4

在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相矛盾。

这实际上是一个矛盾,因此是书中的错误,还是我的理解错误?

1 个答案:

答案 0 :(得分:1)

如果您阅读本书第84页,他特别说......

  

请注意,我们使用allow_blank选项来避免获取多个   字段为空时出现错误消息。

所以它只是为了确保在空白条件下只向object.errors添加一个错误。如果你没有指定“允许空白”,那么你将得到“不能为空”和“必须是gif / jpg / png”的消息,这些消息实际上对最终用户来说是不明确的。 “不能空白”就足够了。

也就是说,匹配格式错误我们允许它高兴地忽略空白条目,因为我们知道它们被其他验证所捕获。