Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Busca de termos com acento ou com letra minúscula

Olá! Notei que mesmo envolvendo o nome com os caracteres %, consigo apenas pesquisar palavras pela metade, mas a busca não reconhece palavras com acento ou em letras minúsculas. Tem algo que eu possa fazer pra que isso também funcione? Abraços

1 resposta
solução!

Oi, Bianca, tem sim mas envolve um pouco de trabalho com o banco de dados. Normalmente a gente tira os acentos no Rails e compara com a forma não acentuada no banco.

A parte do Rails é tranquila mas tirar os acentos no SQLite é um pouco chato eu não me lembro de ter uma forma mais fácil sem ser usando collation. Nele é um pouco mais complexo porque o intuito dele é ser simples e leve. Em bancos mais focados em aplicações maiores como PostgreSQL normalmente eles tem extensões para fazer isso, aí seria uma questão só de ligar. Você pode ler mais sobre essa parte do SQLite aqui

Uma alternativa simplificada pra resolver esse problema seria você fazer algo assim:

  • Criar novo atributo chamado busca no seu model do tipo string
  • Aí no seu model você faria algo assim:
class Produto
  (....)
  before_save :ajusta_busca

  private

  def ajusta_busca
    self.busca = I18n.transliterate(nome.downcase) # troque nome pelo atributo que você quer procurar. 
    # Também daria pra usar o método parameterize(separator: ' ') aí não precisaria do downcase
  end

Agora toda vez que você salvar o produto o campo busca vai valer o campo nome só que tem os acentos então você pode usar o campo busca pra fazer as pesquisar que está querendo fazer :)

Se quiser tirar o acento das palavras digitadas pela pessoa você pode usar o transliterate novamente.