Criando Colunas Virtuais no Rails 7: Um Guia Passo a Passo
O Rails 7 traz uma série de novos recursos e melhorias, tornando ainda mais fácil construir aplicações web robustas e de fácil manutenção. Um dos recursos poderosos disponíveis no Rails é a capacidade de criar colunas virtuais (ou computadas/geradas) nas tabelas do banco de dados. Neste post, exploraremos como criar uma coluna virtual no Rails 7, com explicações detalhadas e exemplos.
O que são Colunas Virtuais?
Colunas virtuais são colunas do banco de dados que não são diretamente armazenadas, mas sim calculadas com base em expressões que envolvem outras colunas. Elas podem ser particularmente úteis para dados derivados, como concatenações, cálculos ou transformações que precisam estar sempre consistentes com os dados de origem.
Exemplo de Cenário
Suponha que temos uma tabela PersonalDocuments
e queremos adicionar uma coluna full_name
que armazena o nome completo de uma pessoa, além de uma coluna virtual full_name_length
que calcula o comprimento do nome completo.
Criando a Migration
Para criar a tabela PersonalDocuments
com as colunas necessárias, usaremos o método de migration create_table
. Veja como fazer isso:
Migration
class CreatePersonalDocuments < ActiveRecord::Migration[7.0]
def change
create_table :personal_documents do |t|
t.string :full_name
t.virtual :full_name_length, type: :integer, as: "length(full_name)", stored: true
t.timestamps
end
end
end
Explicando o código:
create_table :personal_documents
: Cria uma nova tabela chamadapersonal_documents
.t.string :full_name
: Adiciona uma colunafull_name
à tabela.t.virtual :full_name_length, type: :integer, as: "length(full_name)", stored: true
: Adiciona uma coluna virtualfull_name_length
que calcula o comprimento da colunafull_name
.- A opção
stored: true
garante que o valor defull_name_length
seja calculado quando a linha for inserida ou atualizada, sendo armazenado no banco de dados. Isso torna as consultas mais eficientes, pois o valor não precisa ser recalculado toda vez que for acessado.
Atualizando o Modelo
No seu modelo PersonalDocument
, não é necessária nenhuma configuração especial para a coluna virtual. Ela estará disponível como um atributo de leitura.
Modelo
class PersonalDocument < ApplicationRecord
# Qualquer outra lógica do modelo
end
Usando a Coluna Virtual
Agora você pode usar a coluna virtual full_name_length
como qualquer outro atributo. Aqui está um exemplo de como criar um registro e acessar a coluna virtual:
Exemplo de Uso
personal_document = PersonalDocument.create(full_name: "John Doe")
puts personal_document.full_name_length # Saída: 8
Considerações Importantes
- Armazenado vs. Virtual: A opção
stored: true
faz com que a coluna seja uma "coluna gerada armazenada", o que significa que seu valor é calculado quando a linha é inserida ou atualizada, e armazenado no banco de dados. Se você quiser que o valor seja recalculado sempre que for acessado, pode usarstored: false
(embora o suporte para isso varie entre os bancos de dados).
Verificando a Configuração
Após rodar a migration, você pode verificar as colunas com os seguintes comandos no console do Rails:
rails db:migrate
rails console
personal_document = PersonalDocument.create(full_name: "Jane Doe")
puts personal_document.full_name_length # Deve exibir: 8
Essa configuração garante que, sempre que o full_name
for atualizado, a coluna virtual full_name_length
seja recalculada automaticamente e armazenada.
Conclusão
As colunas virtuais no Rails 7 oferecem uma maneira eficiente de manter dados derivados consistentes, eliminando a necessidade de cálculos redundantes e melhorando o desempenho em consultas. Utilizar colunas virtuais com a opção stored: true
pode otimizar a sua aplicação, especialmente em cenários onde os dados derivados são frequentemente acessados e precisam ser mantidos em sincronia com outras colunas.