Querying ActiveRecord: where
O curso trata de filtrar registros no ActiveRecord com .where e find_by. Começa por um hash com várias chaves, em que todas as condições se juntam com AND. Ranges geram BETWEEN e arrays geram IN. O .where.not nega uma condição, e o .or junta duas relations com OR. Chamadas .where encadeadas geram o mesmo SQL de um hash único, e a relation continua preguiçosa. O find_by aceita vários atributos e devolve uma linha ou nil, enquanto o find_by! levanta ActiveRecord::RecordNotFound. Um desafio final refaz o AND em Ruby puro.
O que você vai aprender
- ✓Combinar várias condições num hash de .where com AND
- ✓Usar ranges e arrays para gerar BETWEEN e IN
- ✓Negar condições com .where.not e juntar relations com .or
- ✓Encadear chamadas .where para montar uma consulta preguiçosa em várias linhas
- ✓Buscar um registro com find_by usando vários atributos
- ✓Levantar ActiveRecord::RecordNotFound com find_by! quando nada bate
.where com várias condições de uma vez
A aula "find_by: a mesma ideia, sem o travamento" de ActiveRecord: buscando registros mostrou o formato básico. Article.find_by(title: "Nonexistent") busca por um atributo e devolve nil quando nada bate. Aquela aula deixou o resto para um curso posterior: find_by com várias condições, encadeado com…
Ler a aula completa grátis →Currículo
7 aulas.where com várias condições de uma vez
Um hash de .where com várias chaves junta todas as condições com AND, como o .to_sql mostra.
Ranges e arrays: BETWEEN e IN, em Ruby
Um valor Range gera BETWEEN e um Array gera IN, e os dois continuam em AND com as outras chaves.
.where.not e .or: negação e alternativas
O .where.not nega uma condição, com o cuidado do NULL, e o .or junta duas relations da mesma tabela com OR.
Encadeando múltiplas chamadas .where
Chamadas .where encadeadas geram o mesmo AND de um hash único, e a relation preguiçosa serve para filtros condicionais.
find_by com vários atributos de uma vez
Com vários atributos, o find_by monta um AND com LIMIT 1, como o .take, e devolve uma linha ou nil.
find_by!: a versão barulhenta
O find_by! levanta ActiveRecord::RecordNotFound quando não acha nada, e um console com sandbox é seguro para testar consultas.
Juntando tudo: filtrando registros
Uma revisão de cada aula em oito linhas de código, com um desafio em Ruby puro sobre um array de hashes.