ActiveRecord: unscope/reorder
O curso trata do default_scope no ActiveRecord e de como contorná-lo. Mostra como um default_scope acrescenta sua condição a toda consulta de um model, inclusive find(id), que levanta RecordNotFound para linhas que existem. Explica o unscope, que tira uma condição ou cláusula, e o unscoped, nas formas simples e com bloco, que tira todo o escopo padrão. Apresenta também o reorder, que substitui um ORDER BY. Mostra ainda como scopes de igualdade simples definem atributos em registros novos e por que este app usa um scope :active explícito.
O que você vai aprender
- ✓Como o default_scope aplica uma condição a toda consulta de um model
- ✓Por que find(id) levanta RecordNotFound para uma linha real sob um default_scope
- ✓Como o unscope tira uma condição where ou uma cláusula order ou limit inteira
- ✓Como o unscoped tira todo o escopo padrão, nas formas simples e com bloco
- ✓Como o reorder substitui o ORDER BY enquanto chamadas order encadeadas empilham colunas
- ✓Como condições de igualdade simples no default_scope viram valores de atributo em registros novos
default_scope: toda query, uma linha, sem exceções
Todo curso de querying do ActiveRecord até aqui filtrou de forma explícita, com .where(status: 0) ou Catalog::Course.active: uma chamada, aplicada quando a consulta escolhia aplicá-la. default_scope é outro tipo de ferramenta. É uma condição declarada uma vez, no model, e embutida automaticamente…
Ler a aula completa grátis →Currículo
7 aulasdefault_scope: toda query, uma linha, sem exceções
Como o default_scope embute uma condição em toda consulta do model e por que Catalog::Course usa um scope explícito.
A armadilha do find(id)
O default_scope também filtra find(id), que levanta RecordNotFound para uma linha real fora da condição do scope.
unscope: removendo uma condição, com precisão
Como usar unscope para tirar uma condição where com nome, ou cláusulas order e limit inteiras, mantendo o resto.
unscoped: o instrumento bruto, nas formas simples e com bloco
As formas simples e com bloco de unscoped, que tiram todo o escopo padrão de uma vez, comparadas a unscope.
reorder vs order: substituindo, não acrescentando
Chamadas order encadeadas empilham colunas, enquanto reorder substitui todo o ORDER BY montado até ali.
Condições de scope virando defaults de atributo
Uma condição de igualdade simples no default_scope vira o valor do atributo em registros novos; condições complexas não.
Juntando tudo: scoping que não surpreende ninguém
As ferramentas do curso aplicadas a um model hipotético com default_scope e o motivo da escolha deste app.