Class: ActiveShrine::Attached::Many

Inherits:
Base
  • Object
show all
Defined in:
lib/active_shrine/attached/many.rb

Overview

ActiveShrineAttachedMany

Decorated proxy object representing of multiple attachments to a model.

Instance Attribute Summary

Attributes inherited from Base

#name, #record

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from ActiveShrine::Attached::Base

Instance Method Details

#attach(*attachables) ⇒ Object

Attaches one or more attachables to the record.

If the record is persisted and unchanged, the attachments are saved to the database immediately. Otherwise, they’ll be saved to the DB when the record is next saved.

document.images.attach(params[:images]) # Array of ActionDispatch::Http::UploadedFile objects
person.avatar.attach(params[:signed_id]) # Signed reference to attachment

See https://shrinerb.com/docs/attacher#attaching for more


47
48
49
50
51
52
53
54
# File 'lib/active_shrine/attached/many.rb', line 47

def attach(*attachables)
  record.public_send(:"#{name}=", attachments.map(&:signed_id) + attachables.flatten)
  if record.persisted? && !record.changed?
    return if !record.save
  end

  record.public_send(:"#{name}")
end

#attached?Boolean

Returns true if any attachments have been made.

class Gallery < ApplicationRecord
  has_many_attached :photos
end

Gallery.new.photos.attached? # => false

Returns:

  • (Boolean)


63
64
65
# File 'lib/active_shrine/attached/many.rb', line 63

def attached?
  attachments.any?
end

#attachmentsObject

Returns all the associated attachment records.

All methods called on this proxy object that aren’t listed here will automatically be delegated to attachments.



33
34
35
# File 'lib/active_shrine/attached/many.rb', line 33

def attachments
  change.present? ? change.attachments : record.public_send(:"#{name}_attachments")
end

#detachObject

:method: detach

Deletes associated attachments without purging them, leaving their respective blobs in place.



26
# File 'lib/active_shrine/attached/many.rb', line 26

delegate :detach, to: :detach_many

#purgeObject

:method: purge

Directly purges each associated attachment (i.e. destroys the blobs and attachments and deletes the files on the service).



14
# File 'lib/active_shrine/attached/many.rb', line 14

delegate :purge, to: :purge_many

#purge_laterObject

:method: purge_later

Purges each associated attachment through the queuing system.



20
# File 'lib/active_shrine/attached/many.rb', line 20

delegate :purge_later, to: :purge_many