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.