Class: ActiveStorage::Attachment
- Defined in:
- app/models/active_storage/attachment.rb
Overview
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
Instance Method Summary collapse
-
#purge ⇒ Object
Synchronously deletes the attachment and purges the blob.
-
#purge_later ⇒ Object
Deletes the attachment and enqueues a background job to purge the blob.
-
#variant(transformations) ⇒ Object
Returns an ActiveStorage::Variant or ActiveStorage::VariantWithRecord instance for the attachment with the set of
transformations
provided.
Instance Method Details
#purge ⇒ Object
Synchronously deletes the attachment and purges the blob.
33 34 35 36 37 38 39 |
# File 'app/models/active_storage/attachment.rb', line 33 def purge transaction do delete record.touch if record&.persisted? end blob&.purge end |
#purge_later ⇒ Object
Deletes the attachment and enqueues a background job to purge the blob.
42 43 44 45 46 47 48 |
# File 'app/models/active_storage/attachment.rb', line 42 def purge_later transaction do delete record.touch if record&.persisted? end blob&.purge_later end |
#variant(transformations) ⇒ Object
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.
56 57 58 59 60 61 62 63 64 65 66 67 |
# File '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 |