Method: Paperclip::ClassMethods#validates_attachment_content_type

Defined in:
lib/paperclip.rb

#validates_attachment_content_type(name, options = {}) ⇒ Object

Places ActiveRecord-style validations on the content type of the file assigned. The possible options are:

  • content_type: Allowed content types. Can be a single content type or an array. Each type can be a String or a Regexp. It should be noted that Internet Explorer upload files with content_types that you may not expect. For example, JPEG images are given image/pjpeg and PNGs are image/x-png, so keep that in mind when determining how you match. Allows all by default.

  • message: The message to display when the uploaded file has an invalid content type.

  • if: A lambda or name of a method on the instance. Validation will only be run is this lambda or method returns true.

  • unless: Same as if but validates if lambda or method returns false.

NOTE: If you do not specify an [attachment]_content_type field on your model, content_type validation will work _ONLY upon assignment_ and re-validation after the instance has been reloaded will always succeed.



326
327
328
329
330
331
332
333
334
335
336
337
338
339
# File 'lib/paperclip.rb', line 326

def validates_attachment_content_type name, options = {}
  validation_options = options.dup
  allowed_types = [validation_options[:content_type]].flatten
  validates_each(:"#{name}_content_type", validation_options) do |record, attr, value|
    if !allowed_types.any?{|t| t === value } && !(value.nil? || value.blank?)
      if record.errors.method(:add).arity == -2
        message = options[:message] || "is not one of #{allowed_types.join(", ")}"
        record.errors.add(:"#{name}_content_type", message)
      else
        record.errors.add(:"#{name}_content_type", :inclusion, :default => options[:message], :value => value)
      end
    end
  end
end