.where com várias condições de uma vez
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_bycom um atributo enilquando não acha. Este curso trata do que ficou em aberto: tudo o que.wherefaz, efind_bycom várias condições. .wherecom 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.
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.