2016-08-30 76 views
1

我正在爲我們的內部使用而設計一個消息傳遞系統,並且每條消息都可以有附件。所述附件可以是幾乎任何類型的文件,但有一些我不想允許的文件類型,例如EXE。Rails回形針通過排除內容類型驗證

而不是列出接受CONTENT_TYPES的模型的驗證,數額巨大,其是遠離現實和意願,應該被接受肯定塊的文件,我寧願只是指定應被接受的內容類型。

谷歌搜索沒有結果,但我敢肯定別人之前遇到過這種情況,任何想法如何最好地解決這個問題?

回答

0

所以這是我落得這樣做:

has_mongoid_attached_file :file 

do_not_validate_attachment_file_type :file 
validate :excluded_content_type 

def excluded_content_type 
    forbidden = [ 
    "application/x-msdownload", 
    "application/x-ms-installer", 
    "application/x-elf", 
    "application/x-sh", 
    "application/x-shellscript", 
    "text/x-perl", 
    "text/x-python", 
    "application/javascript" 
    ] 
    errors.add(:base, 'Executable and script files are not allowed.') if forbidden.include? file_content_type 
end 

我不知道這是否是做的最好的方式,但它的工作原理。如果你有更好的方式發佈你的答案!

1

如果內容類型那應該不被接受

寫在model.rb

has_attached_file :record_attachment  
    validates_attachment_content_type :record_attachment, presence: false, :content_type => {:not => "application/zip"} 
+0

請更多信息編輯。僅限代碼和「嘗試這個」的答案是不鼓勵的,因爲它們不包含可搜索的內容,也不解釋爲什麼有人應該「嘗試這個」。 – abarisone

+0

我更新了我的答案。 –