ActiveRecord: buscando registros
Este curso trata de três formas de o ActiveRecord achar linhas numa tabela. O Article.find busca uma linha pela chave primária e gera ActiveRecord::RecordNotFound quando nenhuma linha corresponde. O find_by busca por qualquer atributo e devolve nil quando não acha nada. O Article.all devolve uma ActiveRecord::Relation, que aceita each, map e select e não roda SQL até alguém precisar das linhas. As aulas também conferem cada busca no console em sandbox e terminam com um exemplo que junta os três métodos.
O que você vai aprender
- ✓Buscar uma linha pela chave primária com find
- ✓Como o find gera ActiveRecord::RecordNotFound para um id inexistente
- ✓Buscar por qualquer atributo com find_by, que devolve nil quando não acha
- ✓O que é uma ActiveRecord::Relation e como ela aceita métodos de Enumerable
- ✓Por que uma relation só roda a consulta quando as linhas são necessárias
- ✓Conferir buscas no console em sandbox
Article.find(id): buscando pela chave primária
ActiveRecord: introdução ao model abriu com esta linha sem explicá-la. Article.find(1) busca a linha cujo id é 1 e devolve a instância correspondente, já construída, como as que ActiveRecord: criando registros produziu com .save.
Ler a aula completa grátis →Currículo
7 aulasArticle.find(id): buscando pela chave primária
O Article.find busca uma linha pela chave primária, o id atribuído quando o registro é salvo.
find levanta uma exceção quando nada corresponde
O find gera ActiveRecord::RecordNotFound para um id inexistente, e em produção o Rails responde com 404.
find_by: a mesma ideia, sem o travamento
O find_by busca por qualquer atributo e devolve nil quando nada casa, sem gerar exceção.
Article.all: toda linha, como uma relation
O Article.all devolve uma ActiveRecord::Relation, que aceita each, map, select e o resto do Enumerable.
Uma query espera até ser realmente necessária
Montar uma relation não roda SQL. A consulta só roda quando algo percorre ou converte a relation.
Toda localização, confirmada ao vivo
O console em sandbox roda cada busca numa linha de demonstração e desfaz essa linha no exit.
Juntando tudo: localizar, depois decidir
Uma revisão de quando usar find, find_by ou all e do que cada um faz quando não acha.