2014-03-05 48 views
1

敏捷Web开发的94页使用Rails 4由Sam Ruby的,我发现下面的代码:这些验证声明是否矛盾?

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

如果你看过他具体说,这本书的第84页......我们使用的是allow_blank选项,以避免越来越多 错误消息,当该字段为空

注意。

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

也就是说,匹配格式的错误我们可以让它愉快地忽略空白条目,因为我们知道它们被其他验证所捕获。