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

has_attached_file gives the class it is called on an attribute
that maps to a file. This is typically a file stored somewhere on the
filesystem and has been uploaded by a user. The attribute returns a
Paperclip::Attachment object which handles the management of that file. The
intent is to make the attachment as much like a normal attribute. The
thumbnails will be created when the new file is assigned, but they will
not be saved until save is called on the record. Likewise,
if the attribute is set to nil is called on it, the attachment
will not be deleted until save is called. See the
Paperclip::Attachment documentation for more specifics. There are a number
of options you can set to change the behavior of a Paperclip attachment:

url: The full URL of where the attachment is publically
accessible. This can just as easily point to a directory served directly
through Apache as it can to an action that can control permissions. You can
specify the full domain and path, but usually just an absolute path is
sufficient. The leading slash must be included manually for absolute
paths. The default value is “/system/:attachment/:id/:style/:filename”. See
Paperclip::Attachment#interpolate for more information on variable
interpolaton.

styles: A hash of thumbnail styles and their geometries. You can
find more about geometry strings at the ImageMagick website (www.imagemagick.org/script/command-line-options.php#resize).
Paperclip also adds the “#” option (e.g. “50x50#”), which will resize the
image to fit maximally inside the dimensions and then crop the rest off
(weighted at the center). The default value is to generate no thumbnails.

default_style: The thumbnail style that will be used by default
URLs. Defaults to original.

whiny: Will raise an error if Paperclip cannot post_process an
uploaded file due to a command line error. This will override the global
setting for this attachment. Defaults to true. This option used to be
called :whiny_thumbanils, but this is deprecated.

convert_options: When creating thumbnails, use this free-form
options array to pass in various convert command options. Typical options
are “-strip” to remove all Exif data from the image (save space for
thumbnails and avatars) or “-depth 8” to specify the bit depth of the
resulting conversion. See ImageMagick convert documentation for more
options: (www.imagemagick.org/script/convert.php)
Note that this option takes a hash of options, each of which correspond to
the style of thumbnail being generated. You can also specify :all as a key,
which will apply to all of the thumbnails being generated. If you specify
options for the :original, it would be best if you did not specify
destructive options, as the intent of keeping the original around is to
regenerate all the thumbnails when requirements change.

NOTE: While not deprecated yet, it is not recommended to specify options
this way. It is recommended that :convert_options option be included in the
hash passed to each :styles for compatibility with future versions. NOTE:
Strings supplied to :convert_options are split on space in order to undergo
shell quoting for safety. If your options require a space, please pre-split
them and pass an array to :convert_options instead.

storage: Chooses the storage backend where the files will be
stored. The current choices are :filesystem and :s3. The default is
:filesystem. Make sure you read the documentation for
Paperclip::Storage::Filesystem and Paperclip::Storage::S3 for
backend-specific options.

#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.
You'll still need to have a virtual attribute (created by
attr_accessor) name [attachment]_content_type to be able to use
this validator.

356
357
358
359
360
361
362
363
364
365
366
367
368
369
370

# File 'lib/paperclip.rb', line 356defvalidates_attachment_content_typename,options={}validation_options=options.dupallowed_types=[validation_options[:content_type]].flattenvalidates_each(:#{name}_content_type",validation_options)do|record,attr,value|if!allowed_types.any?{|t|t===value}&&!(value.nil?||value.blank?)ifrecord.errors.method(:add).arity==-2message=options[:message]||"is not one of #{allowed_types.join(", ")}"message=message.callifmessage.respond_to?(:call)record.errors.add(:#{name}_content_type",message)elserecord.errors.add(:#{name}_content_type",:inclusion,:default=>options[:message],:value=>value)endendendend

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

Places ActiveRecord-style validations on the presence of a file. Options:

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

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.

301
302
303
304
305
306
307
308
309
310
311
312
313
314
315

# File 'lib/paperclip.rb', line 301defvalidates_attachment_sizename,options={}min=options[:greater_than]||(options[:in]&&options[:in].first)||0max=options[:less_than]||(options[:in]&&options[:in].last)||(1.0/0)range=(min..max)message=options[:message]||"file size must be between :min and :max bytes"message=message.callifmessage.respond_to?(:call)message=message.gsub(/:min/,min.to_s).gsub(/:max/,max.to_s)validates_inclusion_of:#{name}_file_size",:in=>range,:message=>message,:if=>options[:if],:unless=>options[:unless],:allow_nil=>trueend

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

Adds errors if thumbnail creation fails. The same as specifying
:whiny_thumbnails => true.

318
319
320
321
322
323

# File 'lib/paperclip.rb', line 318defvalidates_attachment_thumbnailsname,options={}warn('[DEPRECATION] validates_attachment_thumbnail is deprecated. '+'This validation is on by default and will be removed from future versions. '+'If you wish to turn it off, supply :whiny => false in your definition.')attachment_definitions[name][:whiny_thumbnails]=trueend