palavras e Código
admin - Janeiro 14, 2022alerta NERD: adoro bancos de dados. Meu Deus, eles são fantásticos. Poucas coisas me dão tanta alegria quanto um quadro branco vazio e algumas mesas de junção intrincadas que precisam ser esboçadas. Mas também há uma arte para entender como lidar com dados – especialmente quando você tem uma tonelada de merda.
o principal problema que as pessoas enfrentam com os dados é primeiro, como armazená-los e, em segundo lugar, como obtê-los quando você realmente precisa! Isso não parece super complicado, certo? Errado. Os bancos de dados crescem verticalmente, não horizontalmente, e eles crescem rapidamente. Em um determinado ponto, a maneira como você armazena seus dados acaba impactando diretamente como você os recupera!
muitos Rubistas escrevem diferentes métodos auxiliares para fazer suas consultas por eles. Mas isso é Rails Land, O que significa que temos magia Black Rails à nossa disposição. E com o advento dos trilhos 4.1, essa magia agora tem um nome: enum.
Obter Yo Enum Em
Quando Rails 4.1 foi lançado há menos de um ano, saiu com um monte de novos recursos. Um deles foi enums ActiveRecord, que essencialmente cortar um monte de métodos e Código supérfluo.
os enums ActiveRecord permitem manipular os atributos de um objeto ActiveRecord em Rails de forma que os valores de um atributo mapeiem para inteiros no banco de dados (em oposição a strings) e, no entanto, também podem ser consultados pelo nome. Se tudo isso soa meio louco para você, é porque é! Enums são muito legais porque têm a flexibilidade de uma string, mas a velocidade e a eficiência de um inteiro. Você pode procurar valores em um banco de dados enorme usando um inteiro, mas também pode atualizar e adicionar atributos como string. Oh – Você também tem um monte de métodos de graça!
então, como essa magia funciona, exatamente? Eu pensei que você nunca perguntaria!
Várias Colunas?! Ninguém tem tempo para isso!
para demonstrar como implementar enums ActiveRecord, continuarei usando o aplicativo ecommerce bookstore da semana passada como meu exemplo. Portanto, tenho esses objetos Book
em minha loja e quero acompanhar Qual é o status deles: in stock
, out of stock
ou ordered
. Por uma questão de simplicidade, vamos fingir que não sou um livreiro super sofisticado, então não tenho muitos Book
s e, portanto, cada objeto Book
só pode ter um desses três estados.
talvez eu comece primeiro por ter três colunas diferentes para representar cada um desses estados:
1234567 |
|
Mas isso parece meio…ridículo. Eu sempre vou ter duas colunas vazias. Este código me tem tudo como:
Alternativamente, eu poderia combinar todas estas colunas em um só e usar alguns métodos auxiliares que retornam valores booleanos, quando eu chamá-los em uma instância de um Book
:
12345678910111213 |
|
Bem, agora eu tenho uma coluna, de modo que é melhor. Mas isso ainda é tão repetitivo, feio e ineficiente. Não se preocupe, está prestes a ficar muito bom.
consulte seu pequeno coração
implementar o enum é bastante simples. Primeiro, adicione a macro à sua classe:
123 |
|
Você vai notar que eu tenho do meu status
atributo categorizadas em três diferentes opções. O fato de que eles se parecem com símbolos em uma matriz não é um erro – cada um desses símbolos está realmente associado ao seu índice. Portanto, in_stock
será referenciado por seu número de índice 0
, out_of_stock
por 1
e ordered
por 2
.
em seguida, adicione uma coluna à sua migração que permitirá que o ActiveRecord enum realize suas consultas:
12345 |
|
quero que todos os meus Book
objetos padrão para um in_stock
status quando eles são criados, então eu adicionei um default: 0
para minha coluna. Adicionar um padrão é sempre uma boa maneira de manter seu código defensivo.
Agora, se eu quero criar um Book
objeto e verificar seu status:
1234567891011121314151617 |
|
Vá em frente e role para cima se você não acredita em mim – eu prometo que eu não faça qualquer um dos seguintes métodos! Enum deu-me, fo livre. Então, o que se passa aqui? Bem, não muito mais do que ActiveRecord mapeando o inteiro correspondente aos índices dos símbolos que fornecemos na matriz de macro enum.
nosso banco de dados tem apenas uma coluna armazenando todas essas informações: status
. Essa coluna tem linhas que são todas 1
, 2
ou 3
. ActiveRecord puxa os símbolos reais que correspondem a esses índices de matriz e os retorna, criando simultaneamente um escopo in_stock
, out_of_stock
e ordered
. E a cereja no topo do bolo: todos os métodos auxiliares que são gerados imediatamente para nós no processo!
dicas e truques
Enums lhe dão muita flexibilidade. Por exemplo, eu brinquei com o in_stock
escopo do meu Book
objeto para criar uma classe específica método que teria fim o top três mais recentes livros adicionados ao meu inventário:
1 |
|
Outra coisa a se lembrar é que você não pode usar os mesmos nomes para enums diferentes da mesma classe:
1234 |
|
Definitivamente não o fizer – e isso irá gerar um ActiveRecord erro!
uma grande vantagem em usar enums é a contribuição deles para a velocidade e o desempenho do seu aplicativo. É um fato bem conhecido que é muito mais barato armazenar dados como um inteiro na memória, em vez de como um valor de string. Os Enums aproveitam isso, mas permitem que você use todos os métodos ActiveRecord que conhece e ama.
portanto, você pode ter seu código legível e divertido de programar sem sacrificar a velocidade e o desempenho necessários para salvar e acessar suas informações. Eu acho que os sonhos realmente se tornam realidade.
tl;dr?
Artigos recentes
- Sobre nós-Gandolfo Helin & Fountain Literary Management
- 5 Coisas a Saber Sobre Shalane Flanagan
- Rolling Stone
- toxicidade da pele
- Sergei Tcherepnin – Artadia
- Como lidar com o estresse Social e pressão
- qual raça de cavalo é a mais inteligente?
- ácido Silício (Si(OH)4), é uma significativa influência sobre a absorção atômica sinal de alumínio medido pelo grafite fornalha atômica espectrometria de absorção (GFAAS)
- explicando nossa inteligência Parte 8 – Auto Inteligente
- Sarita T. M. Alexander (1898-1989)
Deixe uma resposta