Algumas vezes temos que receber imagens via URL e fazer upload para nossos sistemas seja de um site, Facebook, ou outras redes sociais.
Vamos ver como fazer isso usando ActiveStorage?
Abaixo temos um pequeno método que transforma a URL numa URI e depois, usando o open-uri
, podemos fazer download deste arquivo para tê-lo em mãos.
require 'open-uri'
def download_to_file(uri)
stream = URI.parse(uri).open
end
Para usar esse método podemos fazer o seguinte:
# chamamos o método a partir da URL
downloaded_image = download_to_file('UMA URL AQUI')
# user é um objeto da classe User com has_one_attached chamado avatar
user.avatar.attach(io: downloaded_image, filename: File.basename(downloaded_image.path))
# apagamos o arquivo temporário criado pelo open
downloaded_image.delete
Para saber como fazer isso com o Paperclip, veja na documentação :)