Querying ActiveRecord: order
O curso trata de como o ActiveRecord ordena e restringe os resultados de uma consulta, com uma tabela de rascunho ScratchArticleQ de seis linhas e consultas reais deste app. Ele mostra por que as linhas não têm ordem garantida sem .order, por que a direção padrão é crescente e como :desc a inverte, e como várias colunas desempatam. Depois vêm .limit e .offset para paginação, o SQL por trás de .first(n) e .last(n) e o .reorder, que substitui uma ordem existente. No fim, um query object junta tudo para paginar comentários.
O que você vai aprender
- ✓Por que os resultados não têm ordem garantida sem .order
- ✓Ordenar de forma crescente por padrão e decrescente com um hash como views: :desc
- ✓Ordenar por várias colunas para que as seguintes desempatem
- ✓Paginar com .limit e .offset depois de uma ordem explícita
- ✓Como .first(n) e .last(n) montam o SQL
- ✓Substituir uma ordem existente com .reorder em vez de acrescentar
.order: crescente, a menos que você diga o contrário
Querying ActiveRecord: where passou sete aulas numa pergunta: quais linhas voltam. .where e find_by estreitam uma tabela para as linhas que atendem a uma condição, e aquele curso rodou todos os exemplos na tabela de rascunho ScratchArticleQ (title, category, published, views). Este curso faz outra…
Ler a aula completa grátis →Currículo
7 aulas.order: crescente, a menos que você diga o contrário
Sem .order as linhas não têm ordem garantida, e .order(:column) ordena de forma crescente por padrão.
.order(column: :desc): maior primeiro
Um hash como views: :desc ordena do maior para o menor, a única forma de obter DESC.
Ordenando por várias colunas de uma vez
Várias colunas num só .order ordenam pela primeira e usam as seguintes para desempatar.
.limit e .offset: restringindo o resultado
.limit mantém as primeiras n linhas ordenadas e .offset pula linhas, e juntos fazem a paginação.
.first(n) e .last(n): atalhos com uma diferença
.first(n) gera ORDER BY com LIMIT, e .last(n) inverte a ordem, limita e depois inverte o array.
.reorder: substituindo em vez de encadear
Chamar .order duas vezes acrescenta colunas, e .reorder descarta a ordem existente e põe outra no lugar.
Juntando tudo: uma query ordenada e paginada
Uma consulta de comentários combina ordenação, offset e limite de per + 1 para saber se há próxima página.