跳过carrierwave完整性和处理验证

时间:2013-06-21 11:11:18

标签: ruby-on-rails ruby ruby-on-rails-3 rubygems carrierwave

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

def extension_white_list
    %w(doc docx)
end

在某些情况下,我希望在保存记录时跳过完整性验证。但根据他们的文档,默认情况下存在validates_integrity_of验证。

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

任何人都可以告诉我如何跳过此类验证吗?

2 个答案:

答案 0 :(得分:3)

uploaders/file_uploader.rb

中的

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

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

def do_i_need_validation?
  condition? ? true : false
end

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

答案 1 :(得分:0)

我无法在任何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