.where com várias condições de uma vez

Prévia grátis 2 min de leitura

Continuando de onde find_by parou

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 outros métodos de consulta, e tudo o que .where faz. Este é esse curso.

Duas condições, uma consulta, as duas obrigatórias

ScratchArticleQ.where(category: "ruby", published: true)
# => só "Hello Rails", a única linha correspondendo às duas condições

A tabela de rascunho tinha quatro linhas, e só uma era ao mesmo tempo category: "ruby" e published: true. .where com um hash de várias chaves junta as condições com AND: uma linha precisa atender a todas para voltar.

O SQL gerado

ScratchArticleQ.where(category: "ruby", published: true).to_sql
# SELECT "scratch_articles_q".* FROM "scratch_articles_q"
#   WHERE "scratch_articles_q"."category" = 'ruby'
#   AND "scratch_articles_q"."published" = TRUE

.to_sql mostra a consulta: cada chave a mais no hash vira mais uma condição AND na cláusula WHERE. SQL: where e operadores explica o que WHERE ... AND ... significa em SQL puro. É a mesma lógica, escrita como um hash Ruby em vez de digitada à mão.

Pontos-chave

  • ActiveRecord: buscando registros tratou de find_by com um atributo e nil quando não acha. Este curso trata do que ficou em aberto: tudo o que .where faz, e find_by com várias condições.
  • .where com um hash de várias chaves junta todas as condições com AND, então uma linha precisa atender a todas para aparecer.
  • No SQL gerado, cada chave a mais no hash é mais uma condição AND, a mesma lógica WHERE ... AND ... que SQL: where e operadores mostra em SQL puro.
Aula 1 de 7 · grátis

Continue com a aula 2

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.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...