123456789_123456789_123456789_123456789_123456789_

Class: ActiveStorage::Attached::Many

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: ActiveStorage::Attached
Defined in: activestorage/lib/active_storage/attached/many.rb

Overview

Decorated proxy object representing of multiple attachments to a model.

Class Method Summary

Instance Attribute Summary

::ActiveStorage::Attached - Inherited

Instance Method Summary

  • #attach(*attachables)

    Attaches one or more attachables to the record.

  • #attachments

    Returns all the associated attachment records.

  • #blobs

    Returns all attached blobs.

  • #detach

    Deletes associated attachments without purging them, leaving their respective blobs in place.

  • #purge

    Directly purges each associated attachment (i.e.

  • #purge_later

    Purges each associated attachment through the queuing system.

Constructor Details

This class inherits a constructor from ActiveStorage::Attached

Instance Attribute Details

#attached?Boolean (readonly)

Returns true if any attachments have been made.

class Gallery < ApplicationRecord
  has_many_attached :photos
end

Gallery.new.photos.attached? # => false
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/many.rb', line 46

def attached?
  attachments.any?
end

Instance Method Details

#attach(*attachables)

Attaches one or more attachables to the record.

If the record is persisted and unchanged, the attachments are saved to the database immediately. Otherwise, they’ll be saved to the DB when the record is next saved.

document.images.attach(params[:images]) # Array of ActionDispatch::Http::UploadedFile objects
document.images.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
document.images.attach(io: File.open("/path/to/racecar.jpg"), filename: "racecar.jpg", content_type: "image/jpg")
document.images.attach([ first_blob, second_blob ])
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/many.rb', line 30

def attach(*attachables)
  if record.persisted? && !record.changed?
    record.public_send("#{name}=", blobs + attachables.flatten)
    record.save
  else
    record.public_send("#{name}=", (change&.attachables || blobs) + attachables.flatten)
  end
end

#attachments

Returns all the associated attachment records.

All methods called on this proxy object that aren’t listed here will automatically be delegated to attachments.

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/many.rb', line 11

def attachments
  change.present? ? change.attachments : record.public_send("#{name}_attachments")
end

#blobs

Returns all attached blobs.

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/many.rb', line 16

def blobs
  change.present? ? change.blobs : record.public_send("#{name}_blobs")
end

#detach

Deletes associated attachments without purging them, leaving their respective blobs in place.

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/many.rb', line 51

def detach
  attachments.delete_all if attached?
end

#purge

Directly purges each associated attachment (i.e. destroys the blobs and attachments and deletes the files on the service).

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/many.rb', line 56

rdoc_method :method: purge

#purge_later

Purges each associated attachment through the queuing system.

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/many.rb', line 62

rdoc_method :method: purge_later