2010-05-10 41 views
6

我使用回形针来处理我的文件上传,并且在一种情况下,我不希望该文件是强制性的。但是,我确实想确保它是一种特定的文件类型。回形针 - 验证文件类型但不存在

我有这样的:

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

我问作为类似的问题一会儿回http://stackoverflow.com/questions/2257041/smarter-paperclip-validations - 我得到它与proc一起工作。也许它会帮助你 – stephenmurdoch 2010-06-05 05:07:10

回答

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) 
+0

我有版本2.3.2并有同样的问题:( – 2010-05-22 00:20:01

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 
+0

我意识到我必须从Paperclip 2.3.1.1升级到Paperclip 2.3.2后执行此操作 – 2010-06-01 22:33:50

0

讨论首先让我说,我是新来的都Ruby和Rails。其次,我不知道这是否可以应用于音频文件,但使用图像我只是设置了一个默认图像,以便以某种方式存在与每个记录相关的照片。

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