2014-03-05 76 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」的消息,這對最終用戶來說實際上是不清楚的。 「不能空白」就足夠了。

也就是說,匹配格式的錯誤我們可以讓它愉快地忽略空白條目,因爲我們知道它們被其他驗證所捕獲。