Attachments associate records with blobs. Usually that’s a one record-many blobs relationship, but it is possible to associate many different records with the same blob. A foreign-key constraint on the attachments table prevents blobs from being purged if they’re still attached to any records.
Attachments also have access to all methods from ActiveStorage::Blob
.
If you wish to preload attachments or blobs, you can use these scopes:
# preloads attachments, their corresponding blobs, and variant records (if using `ActiveStorage.track_variants`)
User.all.with_attached_avatars
# preloads blobs and variant records (if using `ActiveStorage.track_variants`)
User.first.avatars.with_all_variant_records
Methods
Instance Public methods
purge()
Synchronously deletes the attachment and purges the blob.
📝 Source code
# File activestorage/app/models/active_storage/attachment.rb, line 33
def purge
transaction do
delete
record.touch if record&.persisted?
end
blob&.purge
end
🔎 See on GitHub
purge_later()
Deletes the attachment and enqueues a background job to purge the blob.
📝 Source code
# File activestorage/app/models/active_storage/attachment.rb, line 42
def purge_later
transaction do
delete
record.touch if record&.persisted?
end
blob&.purge_later
end
🔎 See on GitHub
variant(transformations)
Returns an ActiveStorage::Variant
or ActiveStorage::VariantWithRecord
instance for the attachment with the set of transformations
provided. See ActiveStorage::Blob::Representable#variant
for more information.
Raises an ArgumentError
if transformations
is a Symbol
which is an unknown pre-defined variant of the attachment.
📝 Source code
# File activestorage/app/models/active_storage/attachment.rb, line 56
def variant(transformations)
case transformations
when Symbol
variant_name = transformations
transformations = variants.fetch(variant_name) do
record_model_name = record.to_model.model_name.name
raise ArgumentError, "Cannot find variant :#{variant_name} for #{record_model_name}##{name}"
end
end
blob.variant(transformations)
end
🔎 See on GitHub