Проверка типа содержимого вложения Скрепка - PullRequest
5 голосов
/ 05 июля 2010

Можно ли применить проверку «типа контента» в скрепке без применения проверки «присутствия» (т.е. разрешить пропуски)?В настоящее время у меня есть:

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 ]

11 голосов
/ 06 июля 2010

Я не уверен, что метод является причиной вашей неудачи; Вот мой простой класс

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

Возможно, вы проводите другие проверки скрепок. Вы можете опубликовать простой пример?

10 голосов
/ 06 февраля 2013

Рабочий пример

Только в следующей модели 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 с классом, ответственнымдля выполнения проверки.

Или посмотрите на тесты , которые содержат больше примеров.

1 голос
/ 28 сентября 2010

validates_content_type принимает :if => Proc.new{|r| !r.content_type.blank?} в хэше опций, возможно, это решит вашу проблему.

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

0 голосов
/ 27 января 2013

Это сработало для меня;

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