Active Storage em Rails 7
O Active Storage é uma ferramenta Rails que facilita anexar arquivos e armazená-los localmente (intranet) no seu computador ou em plataformas de nuvem como AWS, Google Cloud Storage, Microsoft Azure Storage, Digital Ocean, entre outras.
Neste artigo faremos um projeto do zero utilizando Scaffold, que nos permite criar uma estrutura básica de Rails, tendo como uma de suas funcionalidades anexar uma imagem.
Etapa 1: criar um projeto de livros
Usaremos o PostgreSQL como banco de dados, para o qual o seguinte comando é executado a partir de um terminal:
~~~
rails new books_storage --database postgresql
~~~
Etapa 2: Scaffold
O Scaffold cria uma estrutura básica que permite gerenciar (mostrar, criar, deletar e atualizar) um livro, que terá os seguintes atributos: título, autor, descrição, imagem, etc. Aqui executamos o seguinte comando:
~~~
rails new generate scaffold book title:string author:string description:string image:string
~~~
Etapa 3: instalar o armazenamento ativo
Isso pode ser feito através do seguinte comando:
~~~
rails active_storage:install
~~~
Este comando irá gerar uma migration e criar uma tabela onde serão armazenados os caminhos de todos os arquivos enviados. O arquivo em si não é salvo no banco de dados, mas será armazenado no disco rígido, se estiver trabalhando localmente, ou em armazenamento em nuvem, se for para produção.
O banco de dados é criado com:
~~~
rails db:create
~~~
Posteriormente, as migrações são geradas:
~~~
rails db:migrate
~~~
Etapa 4: Edite a classe Book
Devem ser declarados os arquivos que serão anexados ao modelo do book, aos quais se acrescenta o seguinte:
~~~
class Book < ApplicationRecord
has_one_attached :image
end
~~~
_has_one_attached_ indica que o campo imagem do formulário possui um arquivo anexado.
Etapa 5: adicionar o campo de imagem na exibição
Abrimos o arquivo _form.html.erb encontrado no caminho: app/views/books/_form.html.erb, editamos o campo correspondente à imagem, alterando o tipo text_field para file_field, deixando:
~~~
<div>
<%= form.label :image, style: “display:block” %>
<%= form.file_field :image %>
</div>
~~~
Etapa 6: alterar o caminho raiz
O caminho raiz deve ser alterado para que a interação de classe de livros recém-criada seja executada. Para fazer isso, ele é adicionado em config/route.rb.
~~~
root “books#index”
~~~
onde books refere-se ao controlador e index é a ação a ser executada.
Passo 7: Editar _book.html.erb
Para exibir a imagem anexada, você pode usar o auxiliar image_tag. Ao editar o campo correspondente à imagem, ficaria assim:
~~~
<p>
<strong>Image:</strong>
<%= image_tag book.image, width: 200 if book.image.attached? %>
</p>
~~~
A imagem está pronta para ser exibida e deve ter largura de 200px. A condicional após 200 é para verificar se existe uma imagem anexada, evitando que a aplicação quebre por querer exibir uma imagem inexistente.
Como informação adicional, deve-se garantir que dentro do books_controller no método book_params
seja permitido o registro do campo :image
, com o qual são geradas as permissões para poder salvar a imagem.
Etapa 8: testar o aplicativo
Executamos o servidor com:
~~~
rails server
~~~
para então ir para o endereço https://localhost:3000/books/new. Os campos do formulário são preenchidos e anexada uma imagem disponível no computador local. Depois disso, o registro do livro deve ser realizado de forma satisfatória.
Após o envio do formulário, deverá ser exibido o novo cadastro do livro com sua respectiva imagem.
Em resumo
O Active Storage facilita e reduz a quantidade de código usado para gerenciar as imagens anexadas.
Este pequeno artigo abordou a configuração do Active Storage com Rails 7, além de testar sua funcionalidade usando um formulário básico.
A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.