0

驗證下面的代碼我有只有當一個屬性存在與Rails和Carrierwave

class FactSheet < ActiveRecord::Base 
    mount_uploader :image, ImageUploader 
end 

並上傳

class ImageUploader < CarrierWave::Uploader::Base 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 
end 

這一切都很好,但我現在面臨的問題是,在這種情況下,用戶可選擇提供圖像,因此如果他們不提供一個,我不想看到以下驗證錯誤。

Image You are not allowed to upload "" files, allowed types: jpg, jpeg, gif, png 

如果圖像存在,只驗證/掛載上傳器的最佳方式是什麼?

+0

這是正確的驗證,但是,在這種情況下,你不希望跳過的消息,我只是還沒有看到這種情況。 .. –

+1

如果您希望分配非圖像,則會導致正在添加的錯誤,只需向該字段分配任何值即可。 –

回答

1

在您的簡報模式,你可以像這樣:

validates :attachment, allow_blank: true, format: { 
    with: %r{\.(gif|jpg|png|jpeg)\Z}i, 
    message: 'image must be a GIF, JPEG, PNG format' 
    } 
+0

這很棒,但我希望能夠在可能的情況下使用ImageUploader類。我可以有條件地運行「mount_uploader:image,ImageUploader」嗎? –

+0

爲什麼你會嘗試有條件地運行它?當你可以在你的模型中使用簡單的'allow_blank:true'來做一些你可以得到的東西。據我所知,還沒有看到有人這樣做。 – uday