我正在使用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过程,但是如果没有出现某种错误,我就无法运行它。
这里有什么遗漏?
答案 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左右)。见
的讨论答案 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"