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:
# File activestorage/lib/active_storage/attached/many.rb, line 49
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?()
Returns true if any attachments have been made.
class Gallery < ApplicationRecord
has_many_attached :photos
end
Gallery.new.photos.attached? # => false
Source:
# File activestorage/lib/active_storage/attached/many.rb, line 65
def attached?
attachments.any?
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
.
Source:
# File activestorage/lib/active_storage/attached/many.rb, line 30
def attachments
change.present? ? change.attachments : record.public_send("#{name}_attachments")
end
blobs()
Returns all attached blobs.
Source:
# File activestorage/lib/active_storage/attached/many.rb, line 35
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.
Source:
# File activestorage/lib/active_storage/attached/many.rb, line 23
delegate :detach, to: :detach_many