Query com string conditions em Rails

Dicas - 02/Set/2019 - por Henrique Morato

Muitas vezes durante o desenvolvimento de uma aplicação vamos realizar algumas queries e o Active Record não supre as necessidades, pois, à medida que o sistema cresce, a complexidade de algumas ações também aumenta.

Além disso, algumas queries como LIKE não estão disponíveis por padrão no Active Record. Para isso, usamos String Conditions:

books = Book.where(‘title LIKE ?’, q)

Mas, se queremos fazer a mesma Query em muitos campos do nosso objeto, essa sintaxe não fica tão legível.

books = Book.where(‘title LIKE ? OR category LIKE ? OR subtitle LIKE ?’, q, q, q)

Os Placeholder Conditions vêm pra nos ajudar a tornar essa Query mais compreensível:

books = Book.where(‘title LIKE :word OR category LIKE :word OR subtitle LIKE :word’,word: q)

Com eles, passamos parâmetros como um Hash. Desta forma, podemos dar nomes para contextos que são iguais.

Claro que um conhecimento mais profundo de Active Record e Banco de Dados pode simplificar nossa Query. Por exemplo, em alguns bancos poderíamos usar CONCAT para simplificar a chamada de OR a muitas colunas.

Lembre-se também que o Active Record suporta o método or para múltiplas condições e quando usamos datas podemos usar o Range do Ruby na condição.

books = Book.where(release_date: 2.days.ago.beginnig_of_day..5.days.from_now.end_of_day)