ActiveRecord: enums
O curso trata de enums do Rails a partir do código de um app. Ele começa com uma coluna inteira de nível e a linha enum que liga cada número guardado a um nome. Depois vêm os métodos ? e ! nas instâncias. Em seguida, os scopes da classe e o hash de mapeamento no plural, que pode ser lido nos dois sentidos. O curso mostra por que a atribuição levanta erro num valor inválido e o .where não acha nada, em silêncio. Também aborda o que o enum valida por padrão, a opção validate e o compartilhamento de um mapeamento entre models.
O que você vai aprender
- ✓Como uma declaração enum liga valores inteiros da coluna a nomes
- ✓Os métodos de instância ? e ! e os scopes de classe gerados pelo enum
- ✓A leitura do hash de mapeamento no plural, de nome para inteiro e de volta
- ✓Por que a atribuição levanta erro num valor inválido e o .where não
- ✓O que o enum valida sozinho e como a opção validate muda isso
- ✓O reaproveitamento de um mapeamento entre models com prefix, e o motivo dos hashes explícitos
enum: transformando um inteiro puro num nome que dá pra ler
Catalog::Course tem uma coluna level. A migration deste app, db/migrate/20260226000001_create_courses.rb, a define:
Ler a aula completa grátis →Currículo
7 aulasenum: transformando um inteiro puro num nome que dá pra ler
Como o enum liga a coluna inteira level de Catalog::Course a nomes legíveis, declarados num hash explícito.
Os métodos que o enum escreve pra você: ?, ! e lendo o nome de volta
Os métodos ? e ! que o enum gera para cada nome, usados pelo service que conclui uma matrícula.
Course.junior e o hash .levels: o enum na classe
Os scopes que o enum cria na classe e o hash de mapeamento no plural, lido nos dois sentidos.
A armadilha: a atribuição levanta erro num valor ruim, o .where não
Atribuir um valor inválido levanta ArgumentError, mas o mesmo valor no .where vira uma condição que nunca casa.
O que o enum valida sozinho, e o que este app acrescenta
Um enum simples deixa nil passar, e a opção validate, inclusive com allow_nil, leva a checagem para a validação.
Um mapeamento, dois models: reaproveitando um hash de enum em vez de redigitar ele
Reaproveitar o hash de mapeamento gerado de um model em outro, com prefixos, e por que usar hashes explícitos.
Juntando tudo: os dez enums deste app, lado a lado
Uma tabela com os dez enums do app em oito models, mais as opções default e prefix: true.