2013-02-08 28 views
0

我正在使用以下方法驗證載波上傳的文件內容的MIME類型。rails自定義驗證器以驗證與載波的MIME類型

https://gist.github.com/denyago/1298417

但這種驗證運行,即使沒有內容上傳的所有時間。這顯然失敗了,因爲沒有什麼可以驗證。

validates :logo, :file_mime_type => {:content_type => /image/} 

當沒有內容上傳時,是否有任何工作可以跳過驗證?

謝謝!

UPDATE:

使用PROC或lambda工作做好,直到沒有上傳的內容存在。

 ..., if => Proc.new{|company| company.logo.present?} 

     @company.save #works will when @company contains correct mime type logo file 

     @company.save #fails when @company contains no logo file 

只要有人上載標誌它正確保存對象,並開始在其他任何救不存在圖像上載這裏養錯MIME類型例外。

回答

0

嘗試添加條件。例如:

validates :logo, :file_mime_type => {:content_type => /image/}, :if => Proc.new{|img| img.logo.present?}

+0

感謝您的時間,但如果徽標已經存在於應用程序中,則無法工作,因此img.logo.present?返回true。 –

+0

但你說「沒有內容上傳」。你能澄清一下情況嗎? –

+0

如果徽標已經存在,該驗證應通過(除非您的徽標無效。您是否有無效記錄?您無法更新?) –

-1

如在doc爲carrierwave說明。

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

謝謝,但它只驗證擴展而不是內容。您只需通過更改擴展名即可將視頻文件上傳爲圖像。 –

0

當我試圖保存包含carrierwave屬性的模型時,我遇到了這個問題,在您的示例中說圖像的標題。

validates :logo, :file_mime_type => { :content_type => /image/ }, 
:if => Proc.new{ |img| img.logo.present? and img.logo_changed? } 

_changed?是否可用來判斷該特定屬性是否已更改:How to detect attribute changes from model?