rails自定义验证器,用于验证具有载波的mime类型

时间:2013-02-08 08:45:00

标签: ruby-on-rails-3 validation mime-types carrierwave

我使用以下方式验证带载波的上传文件内容的mime类型。

https://gist.github.com/denyago/1298417

但即使没有上传内容,此验证也会一直在运行。这显然失败了,因为没有什么可以验证的。

 validates :logo, :file_mime_type => {:content_type => /image/}

在没有上传内容时是否有任何解决方法可以跳过验证?

谢谢!

更新

使用proc或lambda工作,直到没有上传的内容为止。

      ..., if => Proc.new{|company| company.logo.present?}

      @company.save #works will when @company contains correct mime type logo file 

      @company.save #fails when @company contains no logo file  

只要有人上传了徽标,它就会正确保存对象并开始在没有图像上传的任何其他保存中引发错误的mime类型异常。

3 个答案:

答案 0 :(得分:0)

尝试添加if条件。例如:

validates :logo, :file_mime_type => {:content_type => /image/}, :if => Proc.new{|img| img.logo.present?}

答案 1 :(得分:0)

当我试图保存包含carrierwave属性的模型时,我遇到了这个问题,比如示例中的图像标题。

validates :logo, :file_mime_type => { :content_type => /image/ },
:if => Proc.new{ |img| img.logo.present? and img.logo_changed? }

_changed?可以判断该特定属性是否已更改:How to detect attribute changes from model?

答案 2 :(得分:-1)

如载波文件中所述。

class MyUploader < CarrierWave::Uploader::Base
  def extension_white_list
   %w(jpg jpeg gif png)
  end
end