验证附件内容类型回形针

时间:2010-07-05 19:56:59

标签: ruby-on-rails paperclip

是否可以在paperclip中强制执行'内容类型'验证而不强制执行'在线'验证(即允许空白)?我目前有:

class Person < ActiveRecord::Base
  has_attached_file :picture
  validates_attachment_content_type :picture, :content_type => ['image/jpeg', 'image/jpg', 'image/png']
end

但是,如果不存在附件,则会失败。例如:

>> @person = Person.new
>> @person.save
>> @person.errors.first
=> ["picture_content_type", "is not one of image/jpeg, image/jpg, image/png"]

仅在包含附件时才可以进行验证。

4 个答案:

答案 0 :(得分:11)

我不确定这种方法是导致失败的原因;这是我的简单课程

class Image < ActiveRecord::Base
  has_attached_file :photo, {
            :styles => { :large => "700x400#", :medium=>"490x368#", :thumbnail=>"75x75#" },
            :default_url => "/images/thumbnail/blank-recipe.png"}
  validates_attachment_content_type :photo, :content_type => /image/ 
end

然后,如果我:

Image.new.valid?
#this is true

但您可能正在进行其他回形针验证。你能发一个简单的例子吗?

答案 1 :(得分:10)

工作示例

在以下型号中,只有 image / png,image / gif和image / jpeg 是图像附件的有效内容类型。

class Photo
  has_attached_file :image
  validates_attachment_content_type :image, 
                                    :content_type => /^image\/(png|gif|jpeg)/
end

功能

describe Photo do
  it { should validate_attachment_content_type(:image).  
              allowing('image/png', 'image/gif', 'image/jpeg').      
              rejecting('text/plain', 'text/xml', 'image/abc', 'some_image/png') }
end

更多信息

您还可以查看 AttachmentContentTypeValidator 类,并负责进行验证。

或者查看其中包含更多示例的 tests

答案 2 :(得分:1)

validates_content_type在其选项哈希中接受:if => Proc.new{|r| !r.content_type.blank?},这可能会解决您的问题。

http://rdoc.info/github/thoughtbot/paperclip#

答案 3 :(得分:0)

这对我有用;

validates_attachment :image1, :presence => true,
                         :content_type => { :content_type => "image/jpg" },
                         :size => { :in => 0..10.kilobytes }