class ActiveStorage::Attachment

Attachments also have access to all methods from ActiveStorage::Blob.
on the attachments table prevents blobs from being purged if they’re still attached to any records.
but it is possible to associate many different records with the same blob. A foreign-key constraint
Attachments associate records with blobs. Usually that’s a one record-many blobs relationship,

def analyze_blob_later

def analyze_blob_later
  blob.analyze_later unless blob.analyzed?
end

def dependent

def dependent
  record.attachment_reflections[name]&.options&.fetch(:dependent, nil)
end

def mirror_blob_later

def mirror_blob_later
  blob.mirror_later
end

def purge

Synchronously deletes the attachment and {purges the blob}[rdoc-ref:ActiveStorage::Blob#purge].
def purge
  transaction do
    delete
    record&.touch
  end
  blob&.purge
end

def purge_dependent_blob_later

def purge_dependent_blob_later
  blob&.purge_later if dependent == :purge_later
end

def purge_later

Deletes the attachment and {enqueues a background job}[rdoc-ref:ActiveStorage::Blob#purge_later] to purge the blob.
def purge_later
  transaction do
    delete
    record&.touch
  end
  blob&.purge_later
end