123456789_123456789_123456789_123456789_123456789_

Class: ActiveStorage::Attached::One

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: ActiveStorage::Attached
Defined in: activestorage/lib/active_storage/attached/one.rb

Overview

Representation of a single attachment to a model.

Class Method Summary

Instance Attribute Summary

  • #attached? ⇒ Boolean readonly

    Returns true if an attachment has been made.

  • #blank? ⇒ Boolean readonly

    Returns true if an attachment is not attached.

  • #detach readonly

    Deletes the attachment without purging it, leaving its blob in place.

  • #purge readonly

    Directly purges the attachment (i.e.

  • #purge_later readonly

    Purges the attachment through the queuing system.

::ActiveStorage::Attached - Inherited

Instance Method Summary

::ActiveStorage::Attached - Inherited

Constructor Details

This class inherits a constructor from ActiveStorage::Attached

Instance Attribute Details

#attached?Boolean (readonly)

Returns true if an attachment has been made.

class User < ApplicationRecord
  has_one_attached :avatar
end

User.new.avatar.attached? # => false
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 73

def attached?
  attachment.present?
end

#blank?Boolean (readonly)

Returns true if an attachment is not attached.

class User < ApplicationRecord
  has_one_attached :avatar
end

User.new.avatar.blank? # => true
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 44

def blank?
  !attached?
end

#detach (readonly)

Deletes the attachment without purging it, leaving its blob in place.

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 25

delegate :detach, to: :detach_one

#purge (readonly)

Directly purges the attachment (i.e. destroys the blob and attachment and deletes the file on the service).

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 13

delegate :purge, to: :purge_one

#purge_later (readonly)

Purges the attachment through the queuing system.

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 19

delegate :purge_later, to: :purge_one

Instance Method Details

#attach(attachable)

Attaches an attachable to the record.

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

person.avatar.attach(params[:avatar]) # ActionDispatch::Http::UploadedFile object
person.avatar.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
person.avatar.attach(io: File.open("/path/to/face.jpg"), filename: "face.jpg", content_type: "image/jpeg")
person.avatar.attach(avatar_blob) # ActiveStorage::Blob object
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 58

def attach(attachable)
  record.public_send("#{name}=", attachable)
  if record.persisted? && !record.changed?
    return if !record.save
  end
  record.public_send("#{name}")
end

#attachment

Returns the associated attachment record.

You don’t have to call this method to access the attachment’s methods as they are all available at the model level.

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 33

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

#detach_one (private)

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 82

def detach_one
  Attached::Changes::DetachOne.new(name, record, attachment)
end

#purge_one (private)

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/one.rb', line 78

def purge_one
  Attached::Changes::PurgeOne.new(name, record, attachment)
end