我在carrierwave上传器类中列出了一些扩展
def extension_white_list
%w(doc docx)
end
在某些情况下,我想在保存记录时跳过完整性验证。但是根据他们的文档,默认情况下存在 validates_integrity_of 验证。
谁能告诉我如何跳过这种验证?
我在carrierwave上传器类中列出了一些扩展
def extension_white_list
%w(doc docx)
end
在某些情况下,我想在保存记录时跳过完整性验证。但是根据他们的文档,默认情况下存在 validates_integrity_of 验证。
谁能告诉我如何跳过这种验证?
在uploaders/file_uploader.rb
def extension_white_list
if model.do_i_need_validation?
%w(doc docx)
else
file.extension
end
end
并在模型中定义这个实例方法
def do_i_need_validation?
condition? ? true : false
end
只需替换适合您应用的方法的内容
我在carrierwave的任何文档中都找不到关于此的任何信息,但是阅读其源代码,可以在mount_uploader
调用中传递特定的上传器选项:
mount_uploader :field, MyUploader, options
上传选项中确实存在验证配置,因此您可以使用以下方法禁用所有验证:
mount_uploader :field, MyUploader, validate_download: false, validate_integrity: false, validate_processing: false
请注意,执行此操作时会默默忽略错误,因此保存会成功。这可能是意外行为。您可以使用模型助手检查操作是否确实有任何错误<field>_processing_error
,<field>_integrity_error
并且<field>_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