Module | Paperclip::ClassMethods |
In: |
lib/dm-paperclip.rb
|
Returns the attachment definitions defined by each call to has_attached_file.
# File lib/dm-paperclip.rb, line 338 338: def attachment_definitions 339: read_inheritable_attribute(:attachment_definitions) 340: 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 => "/:attachment/:id/:style_:basename:extension" :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" }
# File lib/dm-paperclip.rb, line 297 297: def has_attached_file name, options = {} 298: include InstanceMethods 299: 300: self.attachment_definitions = {} if self.attachment_definitions.nil? 301: self.attachment_definitions[name] = {:validations => []}.merge(options) 302: 303: property_options = options.delete_if { |k,v| ![ :public, :protected, :private, :accessor, :reader, :writer ].include?(key) } 304: 305: property "#{name}_file_name""#{name}_file_name", String, property_options.merge(:length => 255) 306: property "#{name}_content_type""#{name}_content_type", String, property_options.merge(:length => 255) 307: property "#{name}_file_size""#{name}_file_size", Integer, property_options 308: property "#{name}_updated_at""#{name}_updated_at", DateTime, property_options 309: 310: after :save, :save_attached_files 311: before :destroy, :destroy_attached_files 312: 313: # not needed with extlib just do before :post_process, or after :post_process 314: # define_callbacks :before_post_process, :after_post_process 315: # define_callbacks :"before_#{name}_post_process", :"after_#{name}_post_process" 316: 317: define_method name do |*args| 318: a = attachment_for(name) 319: (args.length > 0) ? a.to_s(args.first) : a 320: end 321: 322: define_method "#{name}=" do |file| 323: attachment_for(name).assign(file) 324: end 325: 326: define_method "#{name}?" do 327: ! attachment_for(name).original_filename.blank? 328: end 329: 330: if Paperclip.config.use_dm_validations 331: add_validator_to_context(opts_from_validator_args([name]), [name], Paperclip::Validate::CopyAttachmentErrors) 332: end 333: 334: end