跳过carrierwave Integirty和Processingvalidation

我有白色列出了carrierwave上传器类中的一些扩展

def extension_white_list %w(doc docx) end 

在某些情况下,我想在保存记录时跳过完整性validation。 但是根据他们的文档,默认情况下存在validates_integrity_ofvalidation。

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Validate-uploads-with-Active-Record

任何人都可以告诉我如何跳过这样的validation?

uploaders/file_uploader.rb

 def extension_white_list model.do_i_need_validation? %w(doc docx) else %w(pdf) end end 

并在模型中定义此实例方法

 def do_i_need_validation? condition? ? true : false end 

只需替换适合您的应用的方法的内容

我在carrierwave的任何文档中都找不到任何相关内容,但是阅读其源代码,可以在mount_uploader调用中传递特定的上传器选项:

 mount_uploader :field, MyUploader, options 

validation配置确实存在于上传器选项中,因此您可以使用以下方法禁用所有validation:

 mount_uploader :field, MyUploader, validate_download: false, validate_integrity: false, validate_processing: false 

请注意,执行此操作时会自动忽略错误,因此保存将成功。 这可能是意外的行为。 您可以使用模型助手_processing_error_integrity_error_download_error检查操作是否确实存在任何错误:

 class Article < ActiveRecord::Base mount_uploader :image, ImageUploader, validate_integrity: false end article = Article.find(1) article.update_attributes!(title: "New article title", image: open("/path/to/invalid_image.jpg")) # => this will actually succeed article.image_integrity_error # => returns the error message from carrierwave