2016-04-21 248 views
3

我讀的書「敏捷Web開發使用Rails」,我在哪裏去了通過驗證的部分,如下:軌驗證allow_blank和存在

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 

東西我不理解的是,我們將image_url,allow_blank設置爲true,但是我們必須驗證image_url是否存在?這對我來說似乎與第一眼看似矛盾,但我相信這是由於缺乏理解。

什麼是allow_blank驗證正在做什麼?爲什麼我們不驗證:價格也存在?

+0

http://stackoverflow.com/questions/14488465/understanding-rails-validation-what-does-allow-blank-do總之,它與唯一性約束有關 –

+0

圖像url沒有唯一性約束。正則表達式確保圖像的URL是'.gif','.jpg'或'.png'格式。 'allow_blank'告訴rails這個字段可以是空白的,也可以是有效格式的圖像字符串。如果允許空白未通過,則所有空白圖像url字段都會失敗,因爲它們不符合正則表達式格式。 – miler350

回答

4

我可以看到爲什麼你對此感到困惑---它不是很清楚! allow_blank: true的含義是,如果image_url爲空,那麼format驗證程序將不會運行。 presence驗證程序仍將運行,因爲它的聲明沒有allow_blank選項。

這本書是這樣做的原因是爲了避免向用戶顯示2條驗證消息,如果他們將字段留空。您不希望用戶看到「圖片網址不能爲空;圖片網址必須包含圖片文件擴展名」。最好只顯示一條關於它是空白的消息。換句話說,如果有什麼需要驗證的話,我們只想運行格式驗證器。

+0

謝謝你的真棒解釋! – adamscott