ActiveRecord: store/JSONB
ActiveRecord: store/JSONB acompanha como um app Rails usa colunas jsonb do Postgres. O ponto de partida é a migration que converteu colunas bilíngues de string em jsonb com jsonb_build_object, e o down que a desfaz. O curso testa o store_accessor numa tabela descartável e explica por que o app escreveu o próprio concern Translatable. Depois consulta jsonb em SQL com ->> e COALESCE, analisa o que índices GIN e de trigramas aceleram e mostra jsonb guardando payloads OAuth e arrays de dicas.
O que você vai aprender
- ✓Converter colunas de string em jsonb numa migration reversível com jsonb_build_object e ->>
- ✓Como o store_accessor funciona numa coluna jsonb, e por que chaves symbol retornam nil depois de recarregar
- ✓Por que um concern Translatable escrito à mão lida com o idioma pt-BR e chaves repetidas, e o custo no dirty tracking
- ✓Consultar jsonb em SQL com ->>, -> e COALESCE para um fallback de idioma
- ✓Quais operadores um índice GIN padrão acelera, e quando índices de expressão pg_trgm servem
- ✓Usar jsonb para dados de formato variável, como payloads OAuth e arrays de hashes
A migration que transformou as colunas bilíngues em JSONB
Catalog::Course#title e #description, Catalog::Lesson#title e #content_markdown, Catalog::Challenge#instruction, #solution e #hints: todas essas colunas são jsonb. A maioria não começou assim. courses.title, lessons.title, lessons.content_markdown e challenges.instruction nasceram como colunas…
Ler a aula completa grátis →Currículo
7 aulasA migration que transformou as colunas bilíngues em JSONB
Como uma migration converteu colunas bilíngues de string em jsonb com jsonb_build_object, e como o down desfaz isso.
store_accessor: a ferramenta do próprio Rails para esse tipo de coluna
O store_accessor do Rails numa coluna jsonb, testado numa tabela descartável, incluindo chaves symbol que retornam nil após recarregar.
Por que este app criou o Translatable à mão em vez de usar store_accessor
Por que o Translatable evita o store_accessor: hífen de pt-BR, colisão de nomes e custo no dirty tracking.
Consultando JSONB em SQL: ->>, e uma regra de fallback escrita duas vezes
Consultas a JSONB em SQL com ->> e COALESCE, aplicando a mesma regra de fallback de idioma do Ruby.
Índices GIN: o que os índices deste app aceleram, e o que não aceleram
O que um índice GIN padrão sobre jsonb acelera, e como índices de trigramas substituíram os originais do app.
Dados sem esquema cujo formato o app não controla
JSONB para dados de formato variável: payloads OAuth definidos pelo provedor e um array de dicas por idioma.
Juntando tudo: um tipo de coluna, três trabalhos
Uma revisão dos três trabalhos do jsonb neste app e dos arquivos que cada aula citou.