Skip to main content

Metadata Attributes

The metadata_attributes plugin allows you to write attachment metadata to additional record attributes. You can configure the plugin with a hash of mappings:

plugin :metadata_attributes, :size => :size, :mime_type => :type
# or
plugin :metadata_attributes
Attacher.metadata_attributes :size => :size, :mime_type => :type

The above configuration will write size metadata field to <attachment>_size record attribute, and mime_type metadata field to <attachment>_type record attribute.

user.avatar = image
user.avatar.metadata["size"]      #=> 95724
user.avatar_size                  #=> 95724
user.avatar.metadata["mime_type"] #=> "image/jpeg"
user.avatar_type                  #=> "image/jpeg"

user.avatar = nil
user.avatar_size #=> nil
user.avatar_type #=> nil

Model and Entity

With the model plugin, any method that internally calls Attacher#write will trigger metadata attributes writing (Attacher#assign, Attacher#attach, Attacher#change, Attacher#set).

attacher.file.metadata["mime_type"] = "other/type"
attacher.write
attacher.record.avatar_type #=> "other/type"

If you're using the entity plugin, metadata attributes will be added to Attacher#column_values:

attacher.assign(io)
attacher.column_values #=>
# {
#   :image_data => '{ ... }',
#   :image_size => 95724,
#   :image_type => "image/jpeg",
# }

Any metadata attributes that were declared but are missing on the record will be skipped.

Full attribute name

If you want to specify the full record attribute name, pass the record attribute name as a string instead of a symbol.

Attacher.metadata_attributes :filename => "original_filename"
photo.image = image
photo.original_filename #=> "nature.jpg"