class ActiveStorage::Attached::One

Representation of a single attachment to a model.

Public Instance Methods

attach(attachable) click to toggle source

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
# File lib/active_storage/attached/one.rb, line 56
def attach(attachable)
  if record.persisted? && !record.changed?
    record.public_send("#{name}=", attachable)
    record.save
  else
    record.public_send("#{name}=", attachable)
  end
end
attached?() click to toggle source

Returns true if an attachment has been made.

class User < ApplicationRecord
  has_one_attached :avatar
end

User.new.avatar.attached? # => false
# File lib/active_storage/attached/one.rb, line 72
def attached?
  attachment.present?
end
attachment() click to toggle source

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.

# File lib/active_storage/attached/one.rb, line 31
def attachment
  change.present? ? change.attachment : record.public_send("#{name}_attachment")
end
blank?() click to toggle source

Returns true if an attachment is not attached.

class User < ApplicationRecord
  has_one_attached :avatar
end

User.new.avatar.blank? # => true
# File lib/active_storage/attached/one.rb, line 42
def blank?
  !attached?
end
detach() click to toggle source

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

# File lib/active_storage/attached/one.rb, line 23
delegate :detach, to: :detach_one
purge() click to toggle source

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

# File lib/active_storage/attached/one.rb, line 11
delegate :purge, to: :purge_one
purge_later() click to toggle source

Purges the attachment through the queuing system.

# File lib/active_storage/attached/one.rb, line 17
delegate :purge_later, to: :purge_one

Private Instance Methods

detach_one() click to toggle source
# File lib/active_storage/attached/one.rb, line 81
def detach_one
  Attached::Changes::DetachOne.new(name, record, attachment)
end
purge_one() click to toggle source
# File lib/active_storage/attached/one.rb, line 77
def purge_one
  Attached::Changes::PurgeOne.new(name, record, attachment)
end