是否可以在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"]
仅在包含附件时才可以进行验证。
答案 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?}
,这可能会解决您的问题。
答案 3 :(得分:0)
这对我有用;
validates_attachment :image1, :presence => true,
:content_type => { :content_type => "image/jpg" },
:size => { :in => 0..10.kilobytes }