Representation of a single attachment to a model.
Methods
Instance Public methods
attach(attachable)
Associates a given attachment with the current record, saving it to the database.
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/jpg")
person.avatar.attach(avatar_blob) # ActiveStorage::Blob object
Source:
# File activestorage/lib/active_storage/attached/one.rb, line 22
def attach(attachable)
blob_was = blob if attached?
blob = create_blob_from(attachable)
unless blob == blob_was
transaction do
detach
write_attachment build_attachment(blob: blob)
end
blob_was.purge_later if blob_was && dependent == :purge_later
end
end
attached?()
Returns true
if an attachment has been made.
class User < ActiveRecord::Base
has_one_attached :avatar
end
User.new.avatar.attached? # => false
Source:
# File activestorage/lib/active_storage/attached/one.rb, line 43
def attached?
attachment.present?
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.
Source:
# File activestorage/lib/active_storage/attached/one.rb, line 12
def attachment
record.public_send("#{name}_attachment")
end
detach()
Deletes the attachment without purging it, leaving its blob in place.
Source:
# File activestorage/lib/active_storage/attached/one.rb, line 48
def detach
if attached?
attachment.destroy
write_attachment nil
end
end