回形针 - 验证文件类型但不存在

时间:2010-05-10 22:55:02

标签: ruby-on-rails validation paperclip

我正在使用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过程,但是如果没有出现某种错误,我就无法运行它。

这里有什么遗漏?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

此问题已在较新版本的paperclip中修复(我认为基于提交时的2.3.4左右)。见

的讨论

https://github.com/thoughtbot/paperclip/issues/125

答案 2 :(得分: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(..)不会引发任何错误,但会验证我是否提供了文件。也许你使用旧版的回形针?

gem list | ack paperclip
paperclip (2.3.1.1)

答案 3 :(得分:0)

首先让我说我是ruby和rails的新手。其次,我不知道这是否可以应用于音频文件,但是对于图像,我只是设置了一个默认图像,以便这样或那样有一张照片与每条记录相关联。

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