O Active Record é uma das joias da coroa do framework Ruby on Rails, funcionando como a camada de mapeamento objeto-relacional (ORM) que conecta os objetos da sua aplicação com as tabelas do banco de dados. Neste post, vamos explorar como o Active Record simplifica o trabalho com dados e permite que você se concentre na lógica de negócio em vez de escrever SQL manualmente.
O que é o Active Record?
O Active Record implementa o padrão de mesmo nome criado por Martin Fowler, onde objetos incluem tanto os dados quanto o comportamento que atua sobre esses dados. No Rails, cada classe de modelo corresponde a uma tabela no banco de dados, e cada instância dessa classe representa uma linha específica na tabela.
Uma das belezas do Active Record é sua convenção sobre configuração. Ao seguir convenções de nomenclatura simples, ele consegue automaticamente inferir relações entre tabelas e mapear colunas para atributos de objetos sem necessidade de configuração adicional.
Definindo Seus Dados
No Active Record, você não precisa declarar explicitamente os atributos dos seus modelos. Ao invés disso, o Rails utiliza introspecção para determinar as colunas da tabela e criar getters e setters automaticamente. Por exemplo:
class Pedido < ApplicationRecord
end
Com apenas essa definição, você já tem acesso a todos os atributos da tabela pedidos
. O Rails assume que classes no singular correspondem a tabelas no plural, e automaticamente mapeia Pedido
para a tabela pedidos
.
Relacionamentos entre Modelos
O Active Record suporta três tipos de relacionamentos:
-
Um-para-um: Implementado com
has_one
ebelongs_to
-
Um-para-muitos: Implementado com
has_many
ebelongs_to
-
Muitos-para-muitos: Implementado com
has_and_belongs_to_many
ou através de um modelo de junção
Por exemplo, para definir que um pedido pode ter vários itens:
class Pedido < ApplicationRecord
has_many :itens_pedido
end
class ItemPedido < ApplicationRecord
belongs_to :pedido
end
Operações CRUD
O Active Record simplifica as operações de CRUD (Create, Read, Update, Delete):
Create (Criar)
pedido = Pedido.new(cliente: "João Silva", email: "joao@exemplo.com")
pedido.save
# ou
pedido = Pedido.create(cliente: "João Silva", email: "joao@exemplo.com")
Read (Ler)
pedido = Pedido.find(1) # Encontra pelo ID
pedidos = Pedido.where(cliente: "João Silva") # Encontra pela condição
Update (Atualizar)
pedido = Pedido.find(1)
pedido.cliente = "Maria Silva"
pedido.save
# ou
pedido.update(cliente: "Maria Silva")
Delete (Excluir)
pedido = Pedido.find(1)
pedido.destroy
# ou
Pedido.destroy(1)
Consultas Avançadas
O Active Record oferece uma API fluente para consultas que vai muito além do básico:
# Encontra pedidos recentes, ordenados por data
pedidos = Pedido.where("created_at > ?", 7.days.ago)
.order(created_at: :desc)
.limit(10)
Callbacks e Ciclo de Vida
Um dos recursos mais poderosos do Active Record são os callbacks, que permitem executar código em momentos específicos do ciclo de vida dos objetos:
class Pedido < ApplicationRecord
before_save :normalizar_telefone
after_create :enviar_email_confirmacao
private
def normalizar_telefone
self.telefone = telefone.gsub(/\D/, '') if telefone.present?
end
def enviar_email_confirmacao
PedidoMailer.confirmacao(self).deliver_later
end
end
Transações
Para operações que precisam ser atômicas, o Active Record suporta transações:
Conta.transaction do
conta1.depositar(100)
conta2.sacar(100)
end
Se qualquer parte da transação falhar (por exemplo, se conta2
não tiver saldo suficiente), toda a operação será revertida, garantindo a consistência dos dados.
Conclusão
O Active Record é uma abstração poderosa que simplifica enormemente o trabalho com bancos de dados nas aplicações Rails. Ele elimina muito do código clichê normalmente associado ao acesso a dados e permite que você se concentre no que realmente importa: a lógica de negócio da sua aplicação.
À medida que você se torna mais familiar com o Active Record, descobrirá que pode expressar consultas complexas de maneira elegante e legível, sem sacrificar a eficiência. E quando precisar, sempre é possível recorrer ao SQL puro para casos específicos.
Que tal compartilhar nos comentários como você tem usado o Active Record nos seus projetos? Você tem alguma dica ou truque interessante para simplificar ainda mais o trabalho com dados no Rails?
Top comments (0)