Paperclip - 验证文件类型但不验证是否存在

6

我正在使用Paperclip来处理我的文件上传,但某些情况下我不希望文件是必需的,但是当它存在时,我希望确保它是特定的文件类型。

我有以下代码:

class TestModel < ActiveRecord::Base
    #stuff
    has_attached_file :sound #etc...
    validates_attachment_content_type :sound, :content_type => ['audio/mp3', 'application/x-mp3']
end

当我没有音频文件时,它告诉我这不是有效的内容类型之一。我尝试将''添加到:content_type数组中,但也不起作用!我还尝试为:if属性创建一个lambda过程,但我无法在没有某种错误的情况下运行它。这里有什么遗漏吗?

我之前问过一个类似的问题https://dev59.com/vXE95IYBdhLWcg3wkeqq - 我使用了一个proc使它工作。也许可以帮到你。 - stephenmurdoch
4个回答

4
我想你可以尝试使用“条件验证”,其中条件是如果存在一个文件?
class TestModel < ActiveRecord::Base
  #stuff
  has_attached_file :sound #etc...
  validates_attachment_content_type :sound, :content_type => ['audio/mp3', 'application/x-mp3'], :if => :sound_attached?

  def sound_attached?
    self.sound.file?
  end
end

我意识到在将Paperclip 2.3.1.1升级到Paperclip 2.3.2之后,我必须这样做。 - lisimba.gilkes

1

0

首先,我要说我对Ruby和Rails都很陌生。其次,我不知道这是否适用于音频文件,但对于图像,我只需设置一个默认图像,以便每个记录都有一张照片相关联。

has_attached_file :photo, styles: { small: "64x64", med: "100x100", large: "200x200" }, default_url: "/images/no-image-available.png"

0

我的模型代码块:

  has_attached_file :logo, :styles => { :medium => ["300x300>", :png], :thumb => ["100x100>", :png] }
  validates_attachment_size :logo, :less_than => 2.megabytes
  validates_attachment_content_type :logo, :content_type => ['image/jpeg', 'image/png', 'image/gif']

如果我不提供图像文件,@obj.update_attributes(..)不会引发错误,但如果我提供文件,则会进行验证。也许您使用的是较旧版本的paperclip?

gem list | ack paperclip
paperclip (2.3.1.1)

我有2.3.2版本,但是仍然遇到了同样的问题 :( - Ben Orozco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接