Module | Paperclip::ClassMethods |
In: |
lib/paperclip.rb
|
Returns the attachment definitions defined by each call to has_attached_file.
# File lib/paperclip.rb, line 343 343: def attachment_definitions 344: read_inheritable_attribute(:attachment_definitions) 345: end
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 => "/:class/:attachment/:id/:style_:filename" :url => "http://some.other.host/stuff/:class/:id_:extension"
has_attached_file :avatar, :default_url => "/images/default_:style_avatar.png" User.new.avatar_url(:small) # => "/images/default_small_avatar.png"
has_attached_file :avatar, :styles => { :normal => "100x100#" }, :default_style => :normal user.avatar.url # => "/avatars/23/normal_me.png"
has_attached_file :avatar, :styles => { :large => "300x300", :negative => "100x100" } :convert_options => { :all => "-strip", :negative => "-negate" }
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 compatability 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.
# File lib/paperclip.rb, line 235 235: def has_attached_file name, options = {} 236: include InstanceMethods 237: 238: write_inheritable_attribute(:attachment_definitions, {}) if attachment_definitions.nil? 239: attachment_definitions[name] = {:validations => []}.merge(options) 240: 241: after_save :save_attached_files 242: before_destroy :destroy_attached_files 243: 244: define_paperclip_callbacks :post_process, "#{name}_post_process""#{name}_post_process" 245: 246: define_method name do |*args| 247: a = attachment_for(name) 248: (args.length > 0) ? a.to_s(args.first) : a 249: end 250: 251: define_method "#{name}=" do |file| 252: attachment_for(name).assign(file) 253: end 254: 255: define_method "#{name}?" do 256: attachment_for(name).file? 257: end 258: 259: validates_each(name) do |record, attr, value| 260: attachment = record.attachment_for(name) 261: attachment.send(:flush_errors) 262: end 263: end
Places ActiveRecord-style validations on the content type of the file assigned. The possible options are:
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.
# File lib/paperclip.rb, line 326 326: def validates_attachment_content_type name, options = {} 327: validation_options = options.dup 328: allowed_types = [validation_options[:content_type]].flatten 329: validates_each("#{name}_content_type""#{name}_content_type", validation_options) do |record, attr, value| 330: if !allowed_types.any?{|t| t === value } && !(value.nil? || value.blank?) 331: if record.errors.method(:add).arity == -2 332: message = options[:message] || "is not one of #{allowed_types.join(", ")}" 333: record.errors.add("#{name}_content_type""#{name}_content_type", message) 334: else 335: record.errors.add("#{name}_content_type""#{name}_content_type", :inclusion, :default => options[:message], :value => value) 336: end 337: end 338: end 339: end
Places ActiveRecord-style validations on the presence of a file. Options:
# File lib/paperclip.rb, line 302 302: def validates_attachment_presence name, options = {} 303: message = options[:message] || "must be set." 304: validates_presence_of "#{name}_file_name""#{name}_file_name", 305: :message => message, 306: :if => options[:if], 307: :unless => options[:unless] 308: end
Places ActiveRecord-style validations on the size of the file assigned. The possible options are:
# File lib/paperclip.rb, line 274 274: def validates_attachment_size name, options = {} 275: min = options[:greater_than] || (options[:in] && options[:in].first) || 0 276: max = options[:less_than] || (options[:in] && options[:in].last) || (1.0/0) 277: range = (min..max) 278: message = options[:message] || "file size must be between :min and :max bytes." 279: message = message.gsub(/:min/, min.to_s).gsub(/:max/, max.to_s) 280: 281: validates_inclusion_of "#{name}_file_size""#{name}_file_size", 282: :in => range, 283: :message => message, 284: :if => options[:if], 285: :unless => options[:unless], 286: :allow_nil => true 287: end
Adds errors if thumbnail creation fails. The same as specifying :whiny_thumbnails => true.
# File lib/paperclip.rb, line 290 290: def validates_attachment_thumbnails name, options = {} 291: warn('[DEPRECATION] validates_attachment_thumbnail is deprecated. ' + 292: 'This validation is on by default and will be removed from future versions. ' + 293: 'If you wish to turn it off, supply :whiny => false in your definition.') 294: attachment_definitions[name][:whiny_thumbnails] = true 295: end