Active Storage Attached Many

Decorated proxy object representing of multiple attachments to a model.

Methods

Instance Public methods

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/jpeg")
document.images.attach([ first_blob, second_blob ])
πŸ“ Source code
# File activestorage/lib/active_storage/attached/many.rb, line 51
    def attach(*attachables)
      record.public_send("#{name}=", blobs + attachables.flatten)
      if record.persisted? && !record.changed?
        return if !record.save
      end
      record.public_send("#{name}")
    end
πŸ”Ž See on GitHub

attached?()

Returns true if any attachments have been made.

class Gallery < ApplicationRecord
  has_many_attached :photos
end

Gallery.new.photos.attached? # => false
πŸ“ Source code
# File activestorage/lib/active_storage/attached/many.rb, line 66
    def attached?
      attachments.any?
    end
πŸ”Ž See on GitHub

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.

πŸ“ Source code
# File activestorage/lib/active_storage/attached/many.rb, line 32
    def attachments
      change.present? ? change.attachments : record.public_send("#{name}_attachments")
    end
πŸ”Ž See on GitHub

blobs()

Returns all attached blobs.

πŸ“ Source code
# File activestorage/lib/active_storage/attached/many.rb, line 37
    def blobs
      change.present? ? change.blobs : record.public_send("#{name}_blobs")
    end
πŸ”Ž See on GitHub

detach

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

πŸ“ Source code
# File activestorage/lib/active_storage/attached/many.rb, line 25
    delegate :detach, to: :detach_many
πŸ”Ž See on GitHub

purge

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

πŸ“ Source code
# File activestorage/lib/active_storage/attached/many.rb, line 13
    delegate :purge, to: :purge_many
πŸ”Ž See on GitHub

purge_later

Purges each associated attachment through the queuing system.

πŸ“ Source code
# File activestorage/lib/active_storage/attached/many.rb, line 19
    delegate :purge_later, to: :purge_many
πŸ”Ž See on GitHub