diff options
Diffstat (limited to 'activestorage/app/models/active_storage/attachment.rb')
-rw-r--r-- | activestorage/app/models/active_storage/attachment.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/activestorage/app/models/active_storage/attachment.rb b/activestorage/app/models/active_storage/attachment.rb new file mode 100644 index 0000000000..9f61a5dbf3 --- /dev/null +++ b/activestorage/app/models/active_storage/attachment.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require "active_support/core_ext/module/delegation" + +# 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. If you're doing that, +# you'll want to declare with <tt>has_one/many_attached :thingy, dependent: false</tt>, so that destroying +# any one record won't destroy the blob as well. (Then you'll need to do your own garbage collecting, though). +class ActiveStorage::Attachment < ActiveRecord::Base + self.table_name = "active_storage_attachments" + + belongs_to :record, polymorphic: true, touch: true + belongs_to :blob, class_name: "ActiveStorage::Blob" + + delegate_missing_to :blob + + after_create_commit :analyze_blob_later + + # Synchronously purges the blob (deletes it from the configured service) and destroys the attachment. + def purge + blob.purge + destroy + end + + # Destroys the attachment and asynchronously purges the blob (deletes it from the configured service). + def purge_later + blob.purge_later + destroy + end + + private + def analyze_blob_later + blob.analyze_later unless blob.analyzed? + end +end |