class ActiveStorage::Attached::Many

Decorated proxy object representing of multiple attachments to a model.

Public Instance Methods

attach(*attachables) click to toggle source

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 ])
# File 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
attached?() click to toggle source

Returns true if any attachments have been made.

class Gallery < ApplicationRecord
  has_many_attached :photos
end

Gallery.new.photos.attached? # => false
# File lib/active_storage/attached/many.rb, line 46
def attached?
  attachments.any?
end
attachments() click to toggle source

Returns all the associated attachment records.

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

# File lib/active_storage/attached/many.rb, line 11
def attachments
  change.present? ? change.attachments : record.public_send("#{name}_attachments")
end
blobs() click to toggle source

Returns all attached blobs.

# File lib/active_storage/attached/many.rb, line 16
def blobs
  change.present? ? change.blobs : record.public_send("#{name}_blobs")
end
detach() click to toggle source

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

# File lib/active_storage/attached/many.rb, line 51
def detach
  attachments.delete_all if attached?
end
purge() click to toggle source

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

# File lib/active_storage/attached/many.rb, line 56
    
purge_later() click to toggle source

Purges each associated attachment through the queuing system.

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