enum: transformando um inteiro puro num nome que dá pra ler
Uma coluna que os cursos anteriores consultaram o tempo todo
Catalog::Course tem uma coluna level. A migration deste app, db/migrate/20260226000001_create_courses.rb, a define:
t.integer :level, null: false, default: 0
add_index :courses, :level
Um inteiro, não nulo, com padrão 0, indexado. Consulte a coluna direto e todo curso volta como 0, 1, 2 ou 3. Nada nesse resultado diz que número quer dizer o quê. Você teria de achar a migration, ou um comentário, ou perguntar a alguém que lembre.
A mesma coluna, lida através de enum
app/models/catalog/course.rb tem uma linha a mais:
# app/models/catalog/course.rb
enum :level, { intern: 0, junior: 1, mid: 2, senior: 3 }
A coluna não muda. O banco continua guardando de 0 a 3 numa coluna integer indexada, tão rápida de consultar quanto qualquer outra. O que muda é tudo acima do banco: course.level agora retorna "junior", e não 1, e atribuir course.level = "senior" grava 3. O mapeamento entre nome e número fica num lugar só, o model, e não na memória de alguém.
O formato da declaração
Em enum :level, { intern: 0, junior: 1, mid: 2, senior: 3 }, o primeiro argumento é o nome do atributo, que corresponde a uma coluna de verdade (level). O segundo é um hash: o nome à esquerda, o inteiro guardado na coluna à direita. Este app escreve todos os seus enums como hash explícito, e a aula 6 mostra por que isso importa quando um mapeamento precisa mudar.
O que este curso cobre
Sete aulas, todas sobre código que roda neste app. Primeiro vêm os métodos que enum escreve em cada instância (aula 2), depois os que ele escreve na classe, incluindo um mapeamento que você pode consultar direto (aula 3). A aula 4 tem duas armadilhas, uma que protege você e outra que não protege, sem avisar. A aula 5 trata do que enum valida e não valida sozinho, e a aula 6 compartilha um mapeamento entre dois models em vez de redigitá-lo. A aula final junta todos os enums deste app num quadro só.
Este app declara dez deles em oito models, cobrindo desde o nível de dificuldade de um curso até a faixa de patrocínio de um parceiro. A maioria aparece em algum ponto das próximas seis aulas.
Continue com a aula 2
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.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.