2010-02-13 63 views
19

我用回形針在Rails應用程序,並具有以下在我的模型智慧回形針驗證

validates_attachment_presence :photo      
validates_attachment_size :photo, :less_than=>1.megabyte 
validates_attachment_content_type :photo, :content_type=>['image/jpeg', 'image/png', 'image/gif'] 

如果用戶忘記添加附件,所有這三個驗證失敗3次驗證,因此,用戶呈現以下三個錯誤:

# Photo file name must be set. 
# Photo file size file size must be between 0 and 1048576 bytes. 
# Photo content type is not included in the list 

我認爲這將是最好的,只是表明在這種情況下,因爲其他兩個錯誤是純粹的間接的第一個錯誤。我將用戶喜歡永遠只看到如果已添加附件,則會出現第二個錯誤不符合驗證標準。

我敢肯定沒有預焙驗證,做這樣的事情,並從閱讀中的供應商/插件/回形針/ lib中的代碼/ paperclip.rb我看到validates_attachment_size方法支持:除非參數作爲圖:

def validates_attachment_presence name, options = {} 
    message = options[:message] || "must be set." 
    validates_presence_of :"#{name}_file_name", 
         :message => message, 
         :if  => options[:if], 
         :unless => options[:unless] 
end 

所以,我在想,我可以做類似如下:

validates_attachment_size :photo, :less_than=>1.megabyte, :unless=> :photo.blank 

但是,這打破了應用程序。任何人有任何這種事情的經驗?對回形針源代碼會是一個很好的貢獻。

編輯:

我已經使用這個嘗試:

validates_attachment_size :photo, :less_than=>1.megabyte, 
    :unless=> Proc.new { |image| image[:photo].nil? } 

這完全不是那麼回事,雖然因爲我剛剛成功地上傳與此驗證代替5MB的MP3。但它很有希望,因爲用戶沒有附加照片時不會顯示錯誤消息。

+0

回形針哪個版本您使用的?我有2.3.1.1,你所描述的是我自動發生的事情。如果沒有附加文件,它只會返回該錯誤。如果我附加文件,但大小和內容類型驗證失敗,則會顯示這些錯誤。 – 2010-02-13 19:41:00

+0

奇怪,因爲我也在插件的2.3.1.1上......我打算按照下面的建議去創建我自己的自定義錯誤信息,因爲我真的不喜歡他們告訴你接待需求的方式在0到X字節之間.... – stephenmurdoch 2010-02-14 00:26:28

+0

我使用的是2.3.2,同樣的問題 – 2010-05-22 00:31:24

回答

29
validates_attachment_size :photo, :less_than => 1.megabyte, 
    :unless => Proc.new { |imports| imports.photo_file_name.blank? } 
+0

這是完美的 - 謝謝。 – stephenmurdoch 2010-02-21 14:29:27

+1

比::if => Proc.new {| imports | !imports.photo.file? } – 2011-02-04 00:01:24

+0

我不知道這個答案給出了什麼版本,但它不能在我的本地系統上運行(在Rails 3.1.3上運行Paperclip 2.3.11)。 – pcg79 2012-02-23 17:41:07

5

我認爲你可以用其他方式做到這一點。不要混淆驗證。您可能在您的表單中有這樣的內容:

<%= f.error_messages %> 

您可以刪除它並編寫自己的幫助程序以顯示錯誤消息。錯誤存儲在哈希:

@photo.errors 

或者,如果你想通過表單生成器來獲得對他們說:

f.object.errors 
+0

好的方法,巧妙的 – astropanic 2010-02-13 10:29:22