Skip to content

Archives

  • Março 2022
  • Fevereiro 2022
  • Janeiro 2022
  • Dezembro 2021
  • Novembro 2021

Categories

  • Sem categorias
Calor Blogfever risk

palavras e Código

admin - Janeiro 14, 2022

alerta 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
  • Várias Colunas?! Ninguém tem tempo para isso!
  • consulte seu pequeno coração
  • dicas e truques
  • tl;dr?

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 Books 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
class AddStatusesToBooks < ActiveRecord::Migration def change add_column :books, :in_stock?, :boolean add_column :books, :out_of_stock?, :boolean add_column :books, :ordered?, :boolean endend

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
class Book < ActiveRecord::Base def in_stock? self.status == 'in stock' end def out_of_stock? self.status == 'out of stock' end def ordered? self.status == 'ordered' endend

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
class Book < ActiveRecord::Base enum status: end

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
class AddStatusToBooks < ActiveRecord::Migration def change add_column :books, :status, :integer, default: 0 endend

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
book = Book.createbook.status# => "in_stock"book.out_of_stock?# => falsebook.status = :orderedbook.ordered! #updates the objectbook.ordered?# => truebook.status?# => "ordered"book.out_of_stock# => #<ActiveRecord::Relation >

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, 2ou 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
scope :newest_stock, -> (limit: 3) { in_stock.order('date DESC').limit(limit) }

Outra coisa a se lembrar é que você não pode usar os mesmos nomes para enums diferentes da mesma classe:

1234
class Book < ActiveRecord::Base enum status: enum inventory: end

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?

Deixe uma resposta Cancelar resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

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)

Arquivo

  • Março 2022
  • Fevereiro 2022
  • Janeiro 2022
  • Dezembro 2021
  • Novembro 2021

Meta

  • Iniciar sessão
  • Feed de entradas
  • Feed de comentários
  • WordPress.org
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Calor Blog 2022 | Theme by ThemeinProgress | Proudly powered by WordPress