O Rails ActiveStorage é uma solução eficiente e integrada para o upload e armazenamento de arquivos em aplicações Rails. Com ele, é possível gerenciar arquivos como imagens, documentos e outros tipos de mídia, tanto localmente quanto em serviços de armazenamento em nuvem. Neste artigo, vamos explorar como configurar e usar o ActiveStorage para facilitar o upload e o armazenamento de arquivos em sua aplicação Rails.
1. Instalando o ActiveStorage
Para começar a usar o ActiveStorage, é necessário adicionar a gem activestorage
ao seu projeto Rails. A partir da versão Rails 5.2, o ActiveStorage já vem integrado, mas você pode precisar rodar o comando de instalação.
No terminal, execute o seguinte comando:
rails active_storage:install
Isso gerará uma migração que cria as tabelas active_storage_blobs
e active_storage_attachments
, responsáveis pelo armazenamento dos arquivos e pela associação entre arquivos e modelos.
2. Configurando o Storage
O ActiveStorage suporta dois tipos principais de armazenamento: local e em nuvem (como Amazon S3, Google Cloud Storage, entre outros). Para configurar o armazenamento local, basta garantir que o ambiente de desenvolvimento e produção esteja configurado corretamente no arquivo config/storage.yml
.
Para armazenar arquivos localmente, no ambiente de desenvolvimento, o arquivo storage.yml
pode ser configurado da seguinte forma:
development:
local:
service: Disk
root: <%= Rails.root.join("storage") %>
production:
local:
service: Disk
root: <%= Rails.root.join("storage") %>
Se você preferir armazenar arquivos em nuvem, como o Amazon S3, é necessário adicionar as credenciais no arquivo config/storage.yml
e configurar o serviço adequado.
3. Associando Arquivos aos Modelos
Para associar um arquivo a um modelo, use o método has_one_attached
ou has_many_attached
, dependendo de como você deseja associar os arquivos. Vamos supor que você tenha um modelo User
e deseja permitir o upload de uma foto de perfil.
No seu modelo User
, adicione a seguinte linha:
class User < ApplicationRecord
has_one_attached :profile_picture
end
4. Carregando Arquivos no Formulário
No formulário de upload, você pode usar o campo file_field
para permitir que os usuários enviem arquivos. Aqui está um exemplo simples de como fazer isso no formulário de edição de um usuário.
<%= form_with(model: @user, local: true) do |form| %>
<%= form.label :profile_picture %>
<%= form.file_field :profile_picture %>
<%= form.submit %>
<% end %>
5. Exibindo Arquivos no Aplicativo
Para exibir os arquivos enviados, o ActiveStorage oferece o método url_for
, que gera a URL pública do arquivo. No caso de uma imagem de perfil, por exemplo, você pode exibir a foto do usuário da seguinte forma:
<% if @user.profile_picture.attached? %>
<%= image_tag url_for(@user.profile_picture) %>
<% else %>
<p>No profile picture available</p>
<% end %>
6. Gerenciando Arquivos
Além de associar e exibir arquivos, o ActiveStorage também oferece métodos para excluir ou modificar os arquivos. Para excluir um arquivo, você pode usar o método purge
:
@user.profile_picture.purge
Isso removerá o arquivo tanto do banco de dados quanto do sistema de armazenamento.
7. Conclusão
O Rails ActiveStorage facilita o processo de upload e armazenamento de arquivos, seja localmente ou na nuvem. Com a configuração correta e o uso das ferramentas integradas, você pode gerenciar arquivos de forma eficiente e simples. O ActiveStorage ainda oferece recursos avançados, como processamento de imagens e manipulação de arquivos. Isso torna-o uma solução poderosa e flexível para aplicações Rails.
Para mais dicas e truques sobre Rails e outras tecnologias, continue acompanhando o blog Demo Rodável.