diff options
Diffstat (limited to 'lib/active_storage/attached/many.rb')
-rw-r--r-- | lib/active_storage/attached/many.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/active_storage/attached/many.rb b/lib/active_storage/attached/many.rb new file mode 100644 index 0000000000..f1535dfbc6 --- /dev/null +++ b/lib/active_storage/attached/many.rb @@ -0,0 +1,31 @@ +class ActiveStorage::Attached::Many < ActiveStorage::Attached + delegate_missing_to :attachments + + def attachments + @attachments ||= ActiveStorage::Attachment.where(record_gid: record.to_gid.to_s, name: name) + end + + def attach(*attachables) + @attachments = attachments | Array(attachables).flatten.collect do |attachable| + ActiveStorage::Attachment.create!(record_gid: record.to_gid.to_s, name: name, blob: create_blob_from(attachable)) + end + end + + def attached? + attachments.any? + end + + def purge + if attached? + attachments.each(&:purge) + @attachments = nil + end + end + + def purge_later + if attached? + attachments.each(&:purge_later) + @attachments = nil + end + end +end |