def attach(attachable)
      if record.persisted? && !record.changed?
        record.update(name => attachable)
      else
        record.public_send("#{name}=", attachable)
      end
    end
def attach(attachable)
      if record.persisted? && !record.changed?
        record.update(name => attachable)
      else
        record.public_send("#{name}=", attachable)
      end
    end
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/jpg")
   person.avatar.attach(avatar_blob) # ActiveStorage::Blob object