Usando where.not do ActiveRecord

Dicas - 05/Jan/2020 - por Henrique Morato

Desenvolvedores entrando no mundo Rails constantemente acabam por fazer queries de negação, executando algo como:

@articles_not_active = Article.where('status != ?', 'active')

Mas, para alguns desses casos, não seria necessário escrever uma query em string e sim usar o where.not do ActiveRecord. Essa query acima poderia ser algo como:

@articles_not_active = Article.where.not(status: 'active')

A mudança gera o mesmo resultado, mas de uma forma muito mais legível. O where.not ainda proporciona flexibilidade de compor queries com AND de forma mais efetiva. Podemos executar ações como:

@articles = Article.where(status: 'active').where.not(name: nil)

Apesar da query ser essencialmente a mesma, o código é bem mais limpo, legível e possui uma abordagem bem mais rubista do problema.

Recomendamos seguir a leitura na página do Active Record Query Interface.

Foto de perfil do autor
Henrique Morato

Dev